@viktorross

Как составить запрос для поиска в бд mysql?

Здравствуйте, посоветуйте как выполнить поиск по тому принципу который работает сейчас, таким образом, чтобы выполнялся выдавался результат, даже если идет поиск с одинаковым значением поля caption, но с разными значениями поля value, т.е как в запросе. По моему запросу найдутся совпадения только если убрать это ('tip_field','2') и это ('text','test2') потому что таких соответствий нет в таблице, но есть такие ('tip_field','1'), ('text','test')
Как быть? в списке in может быть до 50 значений и такой принцип поиска единственный , который подходит для решения задачи

select class_table1.* from class_table1
left join class_table2 on class_table1.id=class_table2.id

where  class_table1.category_id = 104
and (class_table2.`caption`,class_table2.`value`) in (('tip_field','1'),('tip_field','2'),('text','test'),('text','test2'))

GROUP BY class_table1.id
HAVING COUNT(DISTINCT class_table2.caption, class_table2.value) = 4
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@mrfreeman2
Если я верно понял суть. То решение вот такое:
-- поиск class_table1 у которых (tip_field=1 и text=test) или (tip_field=2 и text=test2)
select class_table1.*
from class_table1
         left join class_table2 on class_table1.id = class_table2.id
where class_table1.category_id = 104
  and (class_table2.caption, class_table2.value) in
      (('tip_field', '1'), ('tip_field', '2'), ('text', 'test'), ('text', 'test2'))
GROUP BY class_table1.id
HAVING COUNT( DISTINCT  class_table2.caption) = 2 -- результат валидный если оба искомых свойства присутствуют у записи
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы