Мне нужна помощь. Нужно реализовать облако тегов, чтобы фильтровать список серверов по нескольким тэгам из выборки. Сайт без CMS. Пример: monitoringminecraft.ru
поисковые теги делаются через связь многие ко многим, т.е. с помощью таблицы-словаря и таблица-связки почему это называется "многие ко многим": - любая запись в фильтруемой таблице может иметь ссылки на произвольное число тегов - любой тег может иметь ссылки на произвольное число записей типа: to google mysql tags many to many --- Добавлено --- кстати, очень желательно объявить первичным ключём article_tag пару (articleid, tagid) чтобы гарантировать уникальность тега внутри одной записи. иначе возможны всякие нежданчики юс кейсы: * выбрать записи, имеющие один конкретный тег Код (Text): SELECT a.id FROM article AS a JOIN article_tags AS at ON at.articleid = a.id JOIN tags AS t ON at.articleid = t.id WHERE t.name = 'ololo' * выбрать записи, имеющие любой из указанных тегов Код (Text): SELECT a.id FROM article AS a JOIN article_tags AS at ON at.articleid = a.id JOIN tags AS t ON at.articleid = t.id WHERE t.name IN('ololo', 'pyshpysh') GROUP BY a.id группировка защитит нас от повторной выдачи записи, имеющей оба тега * выбрать записи, имеющие все указанные теги одновременно Код (Text): SELECT a.id FROM article AS a JOIN article_tags AS at ON at.articleid = a.id JOIN tags AS t ON at.articleid = t.id WHERE t.name IN('ololo', 'pyshpysh') GROUP BY a.id HAVING COUNT(*)=2 функция count при группировке возвращает число совпадений. в нашем частном случае мы ищем два тега. ну ты понял!
* найти число упоминаний каждого тега (чтобы вывести частые теги пожирнее, как это принято в "облаке тегов") Код (Text): SELECT t.tagid, COUNT(*) AS tag_count FROM tags AS t GROUP BY t.tagid