Подскажите как выбрать новости по тегам

12
lutskboy
На сайте с 22.11.2013
Offline
173
719

Здравствуйте

есть вот такая таблица

я хочу выбрать те id новостей которые содержат теги acer и ddr2 одновременно

делаю вот таким запросом

SELECT `news_id` FROM one where tag in ('acer', 'ddr2') group by `news_id` having (count(`news_id`)=2)

тут count(`news_id`)=2 потому что ищем по двум тегам одновременно. если по трем то =3... и.т д

все работает. но если строк в таблице тисяч 5 то выполняется запрос пару сек.

может можно как то по другому отобрать. ?

tommy-gung
На сайте с 22.11.2006
Offline
287
#1

SELECT DISTINCT `news_id` FROM `one` WHERE `tag` IN ('acer', 'ddr2');
так?

---------- Добавлено 06.10.2016 в 21:21 ----------

индекс на tag есть?
Здесь не могла быть ваша реклама
S
На сайте с 30.09.2016
Offline
469
#2
tommy-gung:
SELECT DISTINCT `news_id` FROM `one` WHERE `tag` IN ('acer', 'ddr2');

Этот запрос выведет 1,3 и 4. А надо только 1 и 3.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#3

Кто структуру делал этих тэгов ГЕНИЙ.

Зачем дублировать название тэгов? Почему они не в отдельной таблице?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
S
На сайте с 30.09.2016
Offline
469
#4
LEOnidUKG:
Кто структуру делал этих тэгов ГЕНИЙ.

Тоже обратил внимание. Напрашивается отдельная таблица для тегов и столбец с id тегов в таблице новостей. Правда, пришлось бы часть работы перевалить на скрипт, но зато количество строк уменьшилось бы в разы.

lutskboy
На сайте с 22.11.2013
Offline
173
#5

LEOnidUKG и Sitealert такая структура реализована в дле

но если не затруднит то подскажите ваше виденье на структуру таблиц. спасибо

tommy-gung
На сайте с 22.11.2006
Offline
287
#6
Sitealert:
Этот запрос выведет 1,3 и 4. А надо только 1 и 3.

только два значения? LIMIT 0, 2

S
На сайте с 30.09.2016
Offline
469
#7
tommy-gung:
только два значения? LIMIT 0, 2

Но надо-то, чтобы вывело не просто 2 значения, и не обязательно 2 значения, а те значения, у которых есть необходимая совокупность тегов.

---------- Добавлено 07.10.2016 в 13:48 ----------

lutskboy:
LEOnidUKG и Sitealert такая структура реализована в дле
но если не затруднит то подскажите ваше виденье на структуру таблиц. спасибо

Ломать структуру готовой CMS - тогда нужно иметь какой-то определённый опыт, потому как если сломаете в одном месте, то может вылезти боком в другом месте. А насчёт моего видения - я написал: делается отдельная таблица для тегов, где есть столбцы с id тега, его названием, каким-то комментарием (чтобы из админки было видно, к каким материалам он относится). А в таблице новостей добавляется столбец, в котором перечисляются id тегов к каждой новости - например, в виде строки с разделителями или в виде сериализованного массива. Тогда запрос просматривает 500 строк с новостями, а не 5000 строк с новостями и тегами в разных комбинациях (где надо ещё и найти определённые совпадения). А уже скрипт парсит теги и отбирает нужные новости.

А в том виде, как сейчас, мне, честно говоря, ничего рационального с ходу в голову не приходит.

tommy-gung
На сайте с 22.11.2006
Offline
287
#8
Sitealert:
Но надо-то, чтобы вывело не просто 2 значения, и не обязательно 2 значения, а те значения, у которых есть необходимая совокупность тегов.

честно сказать, я ничего не понял, что нужно ТС

что-то непонятно-абстрактное, как по мне

lutskboy
На сайте с 22.11.2013
Offline
173
#9
tommy-gung:
честно сказать, я ничего не понял, что нужно ТС
что-то непонятно-абстрактное, как по мне

оно то понятное но я пример не много плохой привел

попробуйте например вытащить те новости которые имеют параметры acer ddr2 i3 одновременно

S
На сайте с 30.09.2016
Offline
469
#10
tommy-gung:
что нужно ТС

Например: на сайте есть раздел "Новости корпораций". И надо выбрать новости не просто про компанию Google, и не просто про смартфон, а новости, в которых написано, что именно компания Google выпустила именно смартфон. А если задать третий тег - то именно компания Google выпустила именно смартфон, конкретно с ОС Android.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий