Я хочу написать SQL-запрос для фильтрации данных. У меня есть два раскрывающихся меню, из которых пользователь может выбрать два параметра, и когда вы нажимаете кнопку поиска, запрос возвращает записи из базы данных. Я использовал простой оператор «И», и он отлично работает, когда выбраны значения из обоих раскрывающихся меню. Но проблема возникает, когда выбрано одно раскрывающееся значение, а второе значение оставлено пустым или не выбрано, и когда вы пытаетесь выполнить поиск записей, из-за значения «Null» оператор AND не показывает вам запись из базы данных. Я не хочу использовать оператор ИЛИ, потому что условная часть запроса должна работать, когда оба условия верны.

SELECT * FROM `contacts` WHERE `option_1` = 'buyer' AND `option_2` = ''
sql
0
Bilal 4 Фев 2022 в 11:07

2 ответа

Типичный шаблон, которому вы следуете здесь:

SELECT *
FROM contacts
WHERE (option_1 = ? OR ? IS NULL) AND
      (option_2 = ? OR ? IS NULL);

К четырем ? выше вы должны привязать раскрывающееся значение option_1 для первых двух ? и раскрывающееся значение option_2 для вторых двух ?.

Если ваша настройка действительно такова, что для невыбранных опций вы будете передавать пустую строку в базу данных, используйте эту версию:

SELECT *
FROM contacts
WHERE (option_1 = ? OR ? = '') AND
      (option_2 = ? OR ? = '');
0
Tim Biegeleisen 4 Фев 2022 в 11:10

Неясно, хотите ли вы, чтобы данные извлекались, если один или оба параметра не выбраны пользователем,

С помощью простой настройки вы можете сделать так, чтобы ваш запрос извлекал записи, даже если один или оба параметра равны нулю

Например. вы можете изменить свой запрос примерно так

ВЫБЕРИТЕ * ИЗ "контактов"
ГДЕ ISNULL('option_1','покупатель') = 'покупатель' AND ISNULL('option_2','') = ''

0
GSM 4 Фев 2022 в 12:14
Запрос должен работать, если выбраны оба параметра (что является операцией И), и он также должен работать, если выбран только один из вариантов.
 – 
Bilal
4 Фев 2022 в 12:06
Этот запрос подходит для обеих возможных комбинаций, попробуйте и проверьте, получили ли вы желаемый результат.
 – 
GSM
4 Фев 2022 в 12:07
Просто из любопытства option_1 соответствует покупателю, поэтому, если option_1 не выбран, что нужно по умолчанию? например, хотите ли вы указать какое-либо значение по умолчанию, если оно равно NULL? если да, то что это должно быть? Я отредактировал запрос по умолчанию на «покупатель», если первый вариант не выбран / имеет значение NULL.
 – 
GSM
4 Фев 2022 в 12:13