За последние 24 часа нас посетили 16659 программистов и 1651 робот. Сейчас ищут 1702 программиста ...

Теги для сайта

Тема в разделе "PHP и базы данных", создана пользователем Tuwkan, 18 сен 2017.

  1. Tuwkan

    Tuwkan Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    1
    Симпатии:
    0
    Мне нужна помощь. Нужно реализовать облако тегов, чтобы фильтровать список серверов по нескольким тэгам из выборки. Сайт без CMS. Пример: monitoringminecraft.ru
     
    #1 Tuwkan, 18 сен 2017
    Последнее редактирование: 18 сен 2017
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    751
    Адрес:
    Татарстан
    И? В чем помощь то нужна? Покажите код - что не получается.... Или нужно сделать все за вас?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    с юкоза спизди глобус
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    поисковые теги делаются через связь многие ко многим, т.е. с помощью таблицы-словаря и таблица-связки
    почему это называется "многие ко многим":
    - любая запись в фильтруемой таблице может иметь ссылки на произвольное число тегов
    - любой тег может иметь ссылки на произвольное число записей

    типа:
    [​IMG]
    to google mysql tags many to many
    --- Добавлено ---
    кстати, очень желательно объявить первичным ключём article_tag пару (articleid, tagid) чтобы гарантировать уникальность тега внутри одной записи. иначе возможны всякие нежданчики

    юс кейсы:

    * выбрать записи, имеющие один конкретный тег
    Код (Text):
    1. SELECT a.id
    2. FROM
    3.   article AS a JOIN
    4.   article_tags AS at ON at.articleid = a.id JOIN
    5.   tags AS t ON at.articleid = t.id
    6. WHERE t.name = 'ololo'
    * выбрать записи, имеющие любой из указанных тегов
    Код (Text):
    1. SELECT a.id
    2. FROM
    3.   article AS a JOIN
    4.   article_tags AS at ON at.articleid = a.id JOIN
    5.   tags AS t ON at.articleid = t.id
    6. WHERE t.name IN('ololo', 'pyshpysh')
    7. GROUP BY a.id
    группировка защитит нас от повторной выдачи записи, имеющей оба тега

    * выбрать записи, имеющие все указанные теги одновременно
    Код (Text):
    1. SELECT a.id
    2. FROM
    3.   article AS a JOIN
    4.   article_tags AS at ON at.articleid = a.id JOIN
    5.   tags AS t ON at.articleid = t.id
    6. WHERE t.name IN('ololo', 'pyshpysh')
    7. GROUP BY a.id
    8. HAVING COUNT(*)=2
    функция count при группировке возвращает число совпадений. в нашем частном случае мы ищем два тега. ну ты понял!
     
    Fell-x27 нравится это.
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    * найти число упоминаний каждого тега (чтобы вывести частые теги пожирнее, как это принято в "облаке тегов")
    Код (Text):
    1. SELECT t.tagid, COUNT(*) AS tag_count
    2. FROM tags AS t
    3. GROUP BY t.tagid