SQL-запрос из нескольких столбцов с подготовленным оператором - PullRequest
1 голос
/ 22 ноября 2011

Я хочу иметь возможность искать и возвращать результаты по большинству столбцов в таблице MySQL.Я подумал об использовании базы данных myisam и полнотекстового поиска, но решил, что из-за снижения производительности лучше придерживаться innodb.Я также кратко подумал об использовании чего-то вроде Solr, но подобное решение кажется излишним в моей ситуации.

Я просто пытаюсь добавить функцию поиска в базу данных контактных данных.Когда пользователь вводит слово «Смит», я хочу, чтобы результат возвращал и отображал все строки таблицы, в которых имя, фамилия или даже адрес содержат слово Смит и т. Д.

Скажите, если это неправильный подход,но я остановился на использовании стандартной строки SQL, настроенной так:

SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?

Конечно, фактическая строка запроса будет значительно длиннее, чем этот пример, потому что она будет включать большинство столбцов в таблице.

1) Я предпочитаю использовать подготовленные операторы при запросе базы данных для обеспечения безопасности, но когда я устанавливаю строку sql, как указано выше, код ищет отдельный оператор для каждого?Как я могу просто повторить то же самое "НРАВИТСЯ?"для каждого столбца?Или есть способ установить это подобно:

SELECT * FROM contacts WHERE firstName, lastName, email LIKE ?

Когда я первоначально передаю строку в подготовленное заявление, я окружаю ее символами подстановки (%).

2) Буду ли ябыть в состоянии искать оба столбца VARCHAR и INT?

РЕДАКТИРОВАТЬ: Я в конечном итоге использовал небольшую часть среды Spring, чтобы я мог использовать именованные параметры.К сожалению, JDBC не имеет этой функциональности.Это означало включение небольшой части среды Spring в мой путь сборки, чтобы я мог использовать jdbc jar.В качестве альтернативы я мог бы передать одну строку поиска для каждого параметра в строке запроса, но это привело бы к уродливому / трудному для чтения коду, и я не хотел взламывать ту же строку, поэтому я выбрал использование namedпараметры.

1 Ответ

1 голос
/ 22 ноября 2011

Нет, ты не можешь этого сделать.Вам нужно сделать это так, как у вас в первом запросе:

SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...