类似记录的递归查询

0x6upsns  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(266)

我有两张table,结构如下:

create table article (
id    int         NOT NULL AUTO_INCREMENT PRIMARY KEY,
title varchar(50) NOT NULL,
text  text,
date  timestamp   NOT NULL default CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;

create table article_relate (
article_id_1  int NOT NULL,
article_id_2  int NOT NULL
);

表“article”中的示例记录

id            title
--------------------------------------
1             About Ferrari
2             About Lamborghini
3             About my friends
4             About my kitchen

在第二个表-“article\ U relates”中,我描述了第一个表中类似主题记录的关系。

article_id_1       article_id_2
-----------------------------------
    1                  2
    2                  1

当我添加下一篇文章时,我会将它链接到我所知道的关于相同主题的第一篇文章。 Insert into article (id, title) values (5, 'About Maserati'); 以及一个id=2的类似文章的链接
Insert into article_relate (article_id_1, article_id_2) values (5, 2); Insert into article_relate (article_id_1, article_id_2) values (2, 5); 现在我想向数据库发送一个查询,以获取与关于id=5的文章相关的所有条目。同样,那些与id=2相关的条目。此查询的结果应该是id=5、2和1的记录
应该构建什么查询来获得这种效果?
你能帮助我吗?

knpiaxh1

knpiaxh11#

听起来像连接子句:

SELECT article.id,
       article.name,
       article_relate.id AS article_relate_id
FROM article
LEFT JOIN article_relates ON article.id = article_relate.article_id_1
OR article.id = article_related
WHERE article.id = 5

将列出文章id 5的所有相关文章。这对你有帮助吗?
关于加入mysql-https://dev.mysql.com/doc/refman/8.0/en/join.html

tktrz96b

tktrz96b2#

您可以简单地将select与内部select查询一起使用。

SELECT article.id,article.name FROM article WHERE article.id IN (SELECT article_id_2 from article_relate where article_id_1 = 5);

相关问题