2013-05-31 2 views
0

Я пытаюсь создать запрос, который принимает некоторые входные параметры. Несколько примечаний ...Запрос на поиск MySQL с использованием LIKE

  1. Не все параметры должны быть переданы запросу.
  2. Если параметр не будет передан в запрос, он все равно должен быть передан в любом случае, но как NULL?
  3. Если параметр не передан, как бы я его построил, чтобы не включать параметр?

Так что у вас есть ...

IN name VARCHAR(30), 
IN age VARCHAR(2), 
IN address VARCHAR(50) 

И вы только хотите искать по имени ...

SELECT * FROM Table WHERE 
(
NAME LIKE CONCAT(name, '%') 
); 

Это, кажется, не работает, потому что возраст WASN» t прошел. Или что, если имя было передано и адрес, но не возраст? Как мне это построить?

ответ

1

В предыдущее состояние плаката, передать NULL для неиспользуемых параметров. Затем структурируйте запрос, похожий на ...

SELECT * FROM Table WHERE 
(
    ((nameParameter IS NULL) OR (NameColumn LIKE '%' + NameParameter + '%')) 
    AND 
    ((ageParameter IS NULL) OR (AgeColumn = ageParameter)) 
    AND 
    ((addressParameter IS NULL) OR (AddressColumn = addressParameter)) 
) 
0

Попробуйте это:

SELECT * FROM Table 
WHERE name LIKE '%nametofind%'; 
1

Проблема заключается необязательные параметры не могут быть использованы в MYSQL.

Обходной путь - передать значение null для параметра и внутри хранимой процедуры использовать оператор IF для обработки различных ситуаций.

Посмотрите здесь:

Writing optional parameters within stored procedures in MySQL?

Смежные вопросы