Не знаю как написать запрос в Mysql в заголовке не опишу. Смотрите под катом

Есть простая таблица
id,tag_id,post_id
Как нетрудно догадаться она отображает взаимосвязь между тегом и записью в блоге. Как можно вывести запись у которой есть несколько тегов? Например несколько рядков в таблице могут выглядеть вот так
1 27 5
2 28 5
3 29 5

Как выбрать записи у которых есть все 3 тега? 27,28,29;
  • Вопрос задан
  • 2492 просмотра
Пригласить эксперта
Ответы на вопрос 4
@niko83
SELECT post_id, count(id) as count from post_tag where tag_id IN (27,28,29) GROUP BY post_id HAVING count = 3;
Ответ написан
SELECT post_id FROM table GROUP BY post_id HAVING COUNT(id)>=3
Ответ написан
MiXei4
@MiXei4
Самое простое
SELECT t1.* FROM table as t1, table as t2, table as t3 WHERE (t1.tag_id=27 and t2.tag_id=28 and t3.tag_id=29) and (t1.post_id = t2.post_id) and (t2.post_id = t3.post_id);

Можно наверное усовершенствовать запрос с помощью джоинов и тп…
Ответ написан
@plaha
SELECT post_id, GROUP_CONCAT(tag_id) as gr_tag FROM table GROUP BY post_id HAVING gr = '27,28,29'

В случае неупорядоченности — ORDER BY post_id, tag_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы