mysql - рекурсивный запрос для похожих записей - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть две таблицы с конструкциями ниже:

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_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

Какой запрос должен быть построен, чтобы получить этот эффект?

Можете ли вы мне помочь?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете просто использовать выбор с внутренним запросом выбора.

SELECT article.id,article.name FROM article WHERE article.id IN (SELECT article_id_2 from article_relate where article_id_1 = 5);
0 голосов
/ 20 декабря 2018

звучит как предложение JOIN:

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

перечислит все связанные статьи для идентификатора статьи 5. Вам это поможет?

о объединении в mysql - https://dev.mysql.com/doc/refman/8.0/en/join.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...