Доброго времени суток=) В общем есть 3 таблицы: tags, arts, arts_tags... Допустим таблица arts имеет всего два поля [id, title], таблица tags имеет поля [id, tag_name] и наконец связующая таблица имеет поля [id, art_id, tag_id].. Все уже поняли, что я вывожу статьи с тегами. Но вот дошло дело до поиска по тегам и я уже 5й час мучаюсь с одной дилемой... В общем делаю такой вот запрос: Code: SELECT arts.id, arts.title, GROUP_CONCAT(tags.name) AS tag_names FROM arts JOIN arts_tags ON arts_tags.art_id = arts.id JOIN tags ON tags.id = arts_tags.tag_id WHERE ((MATCH (arts.title) AGAINST ('"Что такое"')) AND (tags.id IN (1, 2))) GROUP BY arts.id HAVING COUNT(*) = 2 Вот если что примеры данных таблиц: Code: Enter password: ********** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3325 Server version: 5.7.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> USE rass Database changed mysql> SELECT arts.id, arts.title FROM arts LIMIT 2; +----+--------------------------------------------------------+ | id | title | +----+--------------------------------------------------------+ | 1 | PHP: Что такое PHP? - Manual | | 2 | Справочное руководство по MySQL | +----+--------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM tags; +----+--------------+ | id | name | +----+--------------+ | 1 | Кодинг | | 2 | PHP | | 3 | MySQL | +----+--------------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM arts_tags WHERE 1; +----+--------+--------+ | id | art_id | tag_id | +----+--------+--------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 1 | 3 | | 4 | 2 | 1 | +----+--------+--------+ 4 rows in set (0.00 sec) mysql> SELECT arts.id, arts.title, GROUP_CONCAT( tags.name ) AS tag_names FROM a rts JOIN arts_tags ON arts_tags.art_id = arts.id JOIN tags ON tags.id = arts_tag s.tag_id WHERE ( (MATCH (arts.title) AGAINST ('"Что такое"')) AND (tags.id IN (1 ,2)) ) GROUP by arts.id HAVING COUNT(*) = 2 -> ; +----+--------------------------------------+------------------+ | id | title | tag_names | +----+--------------------------------------+------------------+ | 1 | PHP: Что такое PHP? - Manual | Кодинг,PHP | +----+--------------------------------------+------------------+ 1 row in set (0.00 sec) mysql> Судя по таблице arts_tags у статьи 3 тега, но поиск идет по двум и выводит только 2 тега! Как сделать так, что-бы выводило все?
Похоже в запросе дополнительное условие на айди тега AND (tags.id IN (1,2) Как вариант так попробовать: AND (tags.id IN (1,2,3)