powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите правильно составить SQL запрос
5 сообщений из 5, страница 1 из 1
Помогите правильно составить SQL запрос
    #39747670
rogodessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане!

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

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

Есть 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
Помогите правильно составить SQL запрос
    #39747703
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите правильно составить SQL запрос
    #39747704
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rogodessa,
еще бы он не был пустым.
Для двух значений можно просто дважды джойнить вторую таблицу, если количество заранее неизвестно - группировка, group_concat и там уже фильтровать по вхождению.
...
Рейтинг: 0 / 0
Помогите правильно составить SQL запрос
    #39747715
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе LEFT JOIN ?

Тебе же не надо показывать те записи syrup_gift, которые не связаны со второй таблицей
...
Рейтинг: 0 / 0
Помогите правильно составить SQL запрос
    #39748026
rogodessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите правильно составить SQL запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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