@rundll32

Алгоритм поиска по тегам?

Если в таблице базы данных есть строкове поле tags, которое содержит теги перечисленные через запятую, как оптимальнее реализовать поисковую выдачу? Допустим первым результатом будет запись с совпадением 3\3, потом 2\3 и 1\3.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
tumbler
@tumbler
бекенд-разработчик на python
SELECT record.id, count(*) 
FROM record 
   JOIN record_tags ON (record_tags.record_id = record.id)
WHERE record_tags.tag_id IN (1,2,3) GROUP BY 1 ORDER BY 2 DESC

В структуре данных "многие-ко-многим" получите все записи, связанные с искомыми тегами, а сортировка выдаст количество совпадений (одной записи с разными тегами)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Никак. Нельзя хранить теги текстовым полем с записанными подряд тегами. Для этого делают связь многие-ко-многим, где теги в отдельной таблице, записи отдельно и есть таблица связей тегов к записям.
Ответ написан
@d-sem
Согласен с ThunderCat

Такая структура противоречит логике баз данных и ведет к неэффективному поиску.

Подробнее почитать можно
Нормализация
Первая нормальная форма
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 сент. 2020, в 17:52
1000 руб./за проект
18 сент. 2020, в 17:49
500 руб./в час
18 сент. 2020, в 17:24
180 руб./за проект