MySQL выборка по нескольким условиям

Выборка из прижоиной таблицы

 
Посетитель
small user social cms
Медаль
Сообщений: 246
Привет, всем!

Есть 3 таблицы!

Спойлер

Делаю запрос к таблице CARS и хочу отсортировать только те марки, у которых параметры одновременно Купе и Внедорожник

То есть под запрос попадает только BMW, так как у него в таблице cars_param_bind есть параметры 1 и 3

Вот что есть:

Код SQL:
  1. SELECT i.* FROM cars i
  2. LEFT JOIN cars_param_bind AS p ON p.item_id = i.id
  3. WHERE (p.value = '1') AND (p.value = '3')
  4. ORDER BY i.date_pub DESC
  5. LIMIT 0, 15
Но результаты не выдает, пишет не найдено по условию!

Помогите правильно сформировать запрос!
Редактировалось: 2 раз (Последний: 18 марта 2020 в 21:00)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3108
Код SQL:
  1. SELECT i.* FROM cars i
  2. LEFT JOIN cars_param_bind AS p ON p.item_id = i.id
  3. WHERE i.id IN
  4. (SELECT item_id FROM `cars_param_bind` WHERE VALUE = 3) AND i.id IN (SELECT item_id FROM `cars_param_bind` WHERE VALUE = 1)
  5. ORDER BY i.date_pub DESC
  6. LIMIT 0, 15
Выдаст:
id name
1 BMW
1 BMW
Если надо, чтобы выдавало одну строку:
Код SQL:
  1. SELECT i.* FROM cars i
  2. LEFT JOIN cars_param_bind AS p ON p.item_id = i.id
  3. WHERE i.id IN
  4. (SELECT item_id FROM `cars_param_bind` WHERE VALUE = 3) AND i.id IN (SELECT item_id FROM `cars_param_bind` WHERE VALUE = 1)
  5. GROUP BY i.id ORDER BY i.date_pub DESC
  6. LIMIT 0, 15
Редактировалось: 1 раз (Последний: 13 марта 2020 в 14:52)
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 525
Вадим Нарочный:


Код PHP:
  1. SELECT i.* FROM cars i
  2. LEFT JOIN cars_param_bind as p ON p.item_id = i.id
  3. WHERE (p.value = '1') AND (p.value = '3')
  4. ORDER BY i.date_pub desc
  5. LIMIT 0, 15

В Вашем запросе, сами представьте, как может быть (p.value = '1') и (p.value = '3')
Редактировалось: 1 раз (Последний: 13 марта 2020 в 14:53)
Посетитель
small user social cms
Медаль
Сообщений: 246
Нашел такое решение:

Код PHP:
  1. GROUP BY p.item_id HAVING COUNT(*) = 2
Жаль что в системе нет встроенного фильтра HAVING, буду думать как добавить к запросу, не внося изменения в системные файлы!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3108
Вадим Нарочный,
А просто сделать пару дополнительных полей в таблице cars никак ?
Посетитель
small user social cms
Медаль
Сообщений: 246
Ris:
А просто сделать пару дополнительных полей в таблице cars никак ?
Не совсем понял какие именно поля, можно пример?
Редактировалось: 1 раз (Последний: 16 марта 2020 в 17:57)
Посетитель
small user social cms
Медаль
Сообщений: 368
Вадим Нарочный, не сочтите за дерзость, но я бы сделал такие таблицы
marks (марки авто: BMW ...)
models (модели)
types (типы авто: Купе ...)
и 2 таблицы связей:
марок с моделями
моделей и типов
Посетитель
small user social cms
Медаль
Сообщений: 246
@IamB:
Вадим Нарочный, не сочтите за дерзость, но я бы сделал такие таблицы
marks (марки авто: BMW ...)
models (модели)
types (типы авто: Купе ...)
и 2 таблицы связей:
марок с моделями
моделей и типов

Эта таблицы просто пример!
Посетитель
small user social cms
Медаль
Сообщений: 246
Нужна реализация выборки по нескольким условиям одного столбца! Пока не нашел способ(
Посетитель
small user social cms
Медаль
Сообщений: 368
Вадим Нарочный, если это пример, то это пример неудачного, на мой взгляд, проектирования БД. Вы так к цели не придёте.
Посетитель
small user social cms
Медаль
Сообщений: 246
@IamB:
Вадим Нарочный, если это пример, то это пример неудачного, на мой взгляд, проектирования БД. Вы так к цели не придёте.
Точно так же реализованы категории в iCMS 2, а разработчик далеко не глупый человек!!!
Редактировалось: 1 раз (Последний: 18 марта 2020 в 18:27)
Посетитель
small user social cms
Медаль
Сообщений: 368
Вадим Нарочный:
Точно так же реализованы категории в iCMS 2
Ой ли?
Посетитель
small user social cms
Медаль
Сообщений: 246
@IamB:
Ой ли?

В чем заключается не удачность проектирования? Связь многие ко многим, через третью таблицу!
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.