|
Помогите правильно составить SQL запрос
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые форумчане! Никак не удается правильно сделать выборку из произвольных таблиц БД. Суть проблемы: Есть 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.
но ответ пустой. Если в запросе WHERE оставить только один тег ( WHERE t.id_tag = 17 ), то выборка работает. Как правильно выполнить запрос? Заранее спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 00:20 |
|
Помогите правильно составить SQL запрос
|
|||
---|---|---|---|
#18+
rogodessaответ пустойНеудивительно. Любое условие отбора во WHERE проверяется всё полностью для каждой записи отдельно. Вы же требуете, чтобы в одной записи поле тега одновременно имело два разных значения - ясен пень такой записи нет, потому что быть не может. Классический подход - отбор только нужных тегов, группировка основной записи, подсчёт количества тегов для неё, и сравнение с эталонным. Т.е. в данном конкретном случае это будет Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 07:47 |
|
Помогите правильно составить SQL запрос
|
|||
---|---|---|---|
#18+
rogodessa, еще бы он не был пустым. Для двух значений можно просто дважды джойнить вторую таблицу, если количество заранее неизвестно - группировка, group_concat и там уже фильтровать по вхождению. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 07:47 |
|
Помогите правильно составить SQL запрос
|
|||
---|---|---|---|
#18+
А зачем тебе LEFT JOIN ? Тебе же не надо показывать те записи syrup_gift, которые не связаны со второй таблицей ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 08:21 |
|
Помогите правильно составить SQL запрос
|
|||
---|---|---|---|
#18+
Akinarogodessaответ пустойНеудивительно. Любое условие отбора во WHERE проверяется всё полностью для каждой записи отдельно. Вы же требуете, чтобы в одной записи поле тега одновременно имело два разных значения - ясен пень такой записи нет, потому что быть не может. Классический подход - отбор только нужных тегов, группировка основной записи, подсчёт количества тегов для неё, и сравнение с эталонным. Т.е. в данном конкретном случае это будет Код: sql 1. 2. 3. 4. 5. 6.
Ребята, всем спасибо за помощь и критику. Akina, вам отдельное спасибо за конкретное и конструктивное решение задачи. Не дошло до меня самого, что можно отфильтровать результаты с помощью HAVING. С меня на кофе, чай или что-то другое )) Бросьте номер кошелька на ЯД или WM. Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 16:36 |
|
|
start [/forum/topic.php?fid=47&msg=39747670&tid=1829417]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
139ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 238ms |
0 / 0 |