Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите правильно составить SQL запрос / 5 сообщений из 5, страница 1 из 1
14.12.2018, 00:20
    #39747670
rogodessa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно составить SQL запрос
Здравствуйте, уважаемые форумчане!

Никак не удается правильно сделать выборку из произвольных таблиц БД.

Суть проблемы:

Есть 2 таблицы:

1-я таблица (название syrup_gift), содержит в себе некоторые записи с полями

id | title | image ….. и т.д.

2-я таблица (название syrup_gift_th_tags) содержит id записей из первой таблицы (id_gift) + id некого тега (id_tag)

id | id_gift | id_tag

Тегов (id_tag) к одной записи может более одного

id | id_gift | id_tag
1 | 2 | 17
2 | 2 | 35
3 | 2 | 8
4 | 2 | 12
5 | 3 | 18
5 | 3 | 17
…..

Как правильно сделать выборку записей из таблицы syrup_gift с учетом того, что запись содержит в себе все переданные в запросе теги? Т.е. например извлечь записи с тегами id_tag=17 и id_tag=35 (не ИЛИ).

Пытаюсь сделать так:

Код: sql
1.
2.
3.
4.
SELECT sg.*
FROM syrup_gift sg
LEFT JOIN syrup_gift_th_tags t ON (sg.id = t.id_gift)
WHERE t.id_tag = 17 AND t.id_tag = 35



но ответ пустой.

Если в запросе WHERE оставить только один тег ( WHERE t.id_tag = 17 ), то выборка работает.

Как правильно выполнить запрос?

Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
14.12.2018, 07:47
    #39747703
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно составить SQL запрос
rogodessaответ пустойНеудивительно. Любое условие отбора во WHERE проверяется всё полностью для каждой записи отдельно. Вы же требуете, чтобы в одной записи поле тега одновременно имело два разных значения - ясен пень такой записи нет, потому что быть не может.

Классический подход - отбор только нужных тегов, группировка основной записи, подсчёт количества тегов для неё, и сравнение с эталонным. Т.е. в данном конкретном случае это будет
Код: sql
1.
2.
3.
4.
5.
6.
SELECT sg.*
FROM syrup_gift sg
INNER JOIN syrup_gift_th_tags t ON sg.id = t.id_gift
WHERE t.id_tag IN (17, 35)
GROUP BY sg.id
HAVING COUNT(DISTINCT t.id_tag) = 2
...
Рейтинг: 0 / 0
14.12.2018, 07:47
    #39747704
paver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно составить SQL запрос
rogodessa,
еще бы он не был пустым.
Для двух значений можно просто дважды джойнить вторую таблицу, если количество заранее неизвестно - группировка, group_concat и там уже фильтровать по вхождению.
...
Рейтинг: 0 / 0
14.12.2018, 08:21
    #39747715
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно составить SQL запрос
А зачем тебе LEFT JOIN ?

Тебе же не надо показывать те записи syrup_gift, которые не связаны со второй таблицей
...
Рейтинг: 0 / 0
14.12.2018, 16:36
    #39748026
rogodessa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно составить SQL запрос
Akinarogodessaответ пустойНеудивительно. Любое условие отбора во WHERE проверяется всё полностью для каждой записи отдельно. Вы же требуете, чтобы в одной записи поле тега одновременно имело два разных значения - ясен пень такой записи нет, потому что быть не может.

Классический подход - отбор только нужных тегов, группировка основной записи, подсчёт количества тегов для неё, и сравнение с эталонным. Т.е. в данном конкретном случае это будет
Код: sql
1.
2.
3.
4.
5.
6.
SELECT sg.*
FROM syrup_gift sg
INNER JOIN syrup_gift_th_tags t ON sg.id = t.id_gift
WHERE t.id_tag IN (17, 35)
GROUP BY sg.id
HAVING COUNT(DISTINCT t.id_tag) = 2



Ребята, всем спасибо за помощь и критику.

Akina, вам отдельное спасибо за конкретное и конструктивное решение задачи. Не дошло до меня самого, что можно отфильтровать результаты с помощью HAVING. С меня на кофе, чай или что-то другое )) Бросьте номер кошелька на ЯД или WM.

Еще раз спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите правильно составить SQL запрос / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]