Помогите организовать SQL-запрос

147
15 декабря 2016, 15:53

У меня есть такая таблица:

params_detalis_users_xref  
id  
id_user     
id_param    
value_ot    
value_do

Т.е. у меня количество параметров динамично и регулируется в админке. И есть также поиск по этим параметрам. Пример забитых данных:

Мне нужно проверить так, чтобы по обоим параметрам проверялось одновременно. Я немного ступил и сделал такой запрос:

SELECT id_user FROM params_detalis_users_xref WHERE (id_param='1' and value_ot<=200 and value_do>=297) AND (id_param='2' and value_ot<=300 and value_do>=320)

Такой запрос мне ничего не возвращает, т.к. я одновременно проверяю парметр id_param, который не может быть равным нескольким значениям. Но если я заменю AND на OR, то на первый взгляд будет всё работать, но если один из параметров не совпадёт, то он всёравно мне вернёт 34го юзера, хотя один из параметров поиска не подходит. Была такая мысль: сравнивать общее количество параметров, с количеством возвращённых одинаковых id юзера. Но это придётся делать запрос на общее количество параметров каждый раз, когда встречается новый id_user, а я хочу как можно меньше запросов. Прошу помощи у более опытных, пожалуйста:) Прошу прощения, если что-то не понятно написал, целый день работаю, уже плохо формулирую мысли:) Пожалуйста, если что-то не понятно, уточните.

Answer 1

Вы же знаете количество проверяемых параметров, когда генерируете запрос? Напишите OR и сравнивайте количество полученных строк с этим количеством. Видимо, ещё понадобится group by, так как подходящих пользователей может быть несколько:

SELECT id_user
FROM params_detalis_users_xref 
WHERE (id_param='1' and value_ot<=200 and value_do>=297) OR 
      (id_param='2' and value_ot<=300 and value_do>=320)
GROUP BY id_user
HAVING count(id_param)=2
Answer 2

Попробуйте так, но не уверен насчет правильности конструкций.. Поправьте меня.

SELECT `id_user`,`value_ot`,`value_do` FROM `params_detalis_users_xref ` WHERE `id_param` IN (1,2) GROUP BY `id_user` HAVING `value_ot`<=300 AND `value_do`>=320
Answer 3

Сделай 1 запрос по id_param='1' и если получишь данные то гуд, нет делай второй запрос на id_param='2'

READ ALSO
Архитектура БД для экспорта таблицы

Архитектура БД для экспорта таблицы

Заранее извиняюсь за много букв

129
Все элементы, родитель которых - корневой

Все элементы, родитель которых - корневой

Есть таблица с такой структурой:

148
Php запись из БД в xml

Php запись из БД в xml

У меня есть база данных с картинками и текстом, как сделать так чтобы все данные из базы записались в xml файл, с помощью php скрипта может быть?...

153