Есть стандартные таблицы отношения многие-ко-многим.
post: id, name;
tag: id, name;
post_tag: post_id, tag_id;
Нужно найти 2 поста, у которых наибольшее количество общих тегов.
Как сделать правильный запрос с помощью Yii2?
Re: Как сделать правильный запрос с помощью Yii2?
а как сделать это без помощи Yii2? на чисто mysql?
Re: Как сделать правильный запрос с помощью Yii2?
т.е. вы свои провалы в знаниях прикрываете недостаточностью информации о фреймворке?
Re: Как сделать правильный запрос с помощью Yii2?
Нет.lynicidn писал(а):т.е. вы свои провалы в знаниях прикрываете недостаточностью информации о фреймворке?
Я хочу понять, как это можно сделать.
Re: Как сделать правильный запрос с помощью Yii2?
На уии2 или вообще? Если вообще, то раздел для топика выбран неверно, если на Yii2, то напишите sql и вам его превратят в код на Yii2damasco писал(а):Нет.lynicidn писал(а):т.е. вы свои провалы в знаниях прикрываете недостаточностью информации о фреймворке?
Я хочу понять, как это можно сделать.
Re: Как сделать правильный запрос с помощью Yii2?
Код: Выделить всё
SELECT p1_id, p2_id, COUNT(hits) tag_count FROM (SELECT
p1.id p1_id,
p2.id p2_id,
COUNT(post_tag.tag_id) hits
FROM (post p1, post p2)
RIGHT JOIN post_tag
ON (p1.id = post_tag.post_id) OR (p2.id = post_tag.post_id)
WHERE p1.id > p2.id
GROUP BY p1.id, p2.id, post_tag.tag_id
HAVING COUNT(post_tag.tag_id) > 1) counts
GROUP BY p1_id, p2_id
ORDER BY tag_count DESC
LIMIT 1
Re: Как сделать правильный запрос с помощью Yii2?
Код: Выделить всё
Yii::$app->db->createCommand('SELECT p1_id, p2_id, COUNT(hits) tag_count FROM (SELECT
p1.id p1_id,
p2.id p2_id,
COUNT(post_tag.tag_id) hits
FROM (post p1, post p2)
RIGHT JOIN post_tag
ON (p1.id = post_tag.post_id) OR (p2.id = post_tag.post_id)
WHERE p1.id > p2.id
GROUP BY p1.id, p2.id, post_tag.tag_id
HAVING COUNT(post_tag.tag_id) > 1) counts
GROUP BY p1_id, p2_id
ORDER BY tag_count DESC
LIMIT 1')->queryAll()