|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.05.2015, 08:01 | #1 |
Пользователь
Регистрация: 29.11.2011
Сообщений: 23
|
Поиск в таблице БД
Добрый день, нужна ваша помощь! Нужно организовать поиск в таблице только по тем параметрам, которые выбраны. Если параметр не выбран то его в запросе не учитывать. Примером может служить поиск автомобилей на сайте, где мы выбираем только те параметры которые нам нужны, остальные не учитываем. Как организовывают такие запросы и где об этом можно почитать?
|
09.05.2015, 08:20 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Это можно сделать заглушками:
Код:
I'm learning to live...
|
09.05.2015, 08:27 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Обычно динамически формирую строку условий, примерно в этом же духе, и если не пустая, то добавляю к запросу where и сформированную строку. Без всяких 1=1, лишний and слева или справа сформированной строки убрать нет проблем. Обычно проблемы возникают при участии даты/времени, действительных чисел в таких конструкциях, нужно быть по аккуратней, четко понимая чего пишешь и как СУБД поймет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.05.2015 в 08:32. |
09.05.2015, 08:31 | #4 | |
Участник клуба
Регистрация: 10.08.2010
Сообщений: 1,389
|
Цитата:
2) скачайте книга Флёнов М.Е. - Библия Delphi (3-е издание) - 2011.pdf Глава 14. Delphi и база данных и на 405 странице объясняет параметризированный запрос
E_MAIL: rijgvina7@yahoo.com
Последний раз редактировалось xxbesoxx; 09.05.2015 в 08:34. |
|
09.05.2015, 08:38 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Фленов много чего написал и не всегда нужно его указаниям следовать. Параметризированный запрос хорошо, но не всегда панацея. Как быть, если возможных условий поиска два-три десятка, а уж о числе их комбинаций не прилично говорить. Посмотрю на этот параметризированный запрос, пестрящий заглушками вида 1=1 или чего-то в таком духе, и не всегда это удастся сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.05.2015 в 08:41. |
09.05.2015, 09:26 | #6 | |
Пользователь
Регистрация: 29.11.2011
Сообщений: 23
|
Цитата:
|
|
09.05.2015, 09:55 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Думаешь реальный пример что-то даст? Ну вот выдернул кусочек для примера сколько уместилось
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
09.05.2015, 11:12 | #8 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
09.05.2015, 12:18 | #9 | |||
Участник клуба
Регистрация: 10.08.2010
Сообщений: 1,389
|
Цитата:
Цитата:
Код:
Цитата:
E_MAIL: rijgvina7@yahoo.com
Последний раз редактировалось xxbesoxx; 09.05.2015 в 12:23. |
|||
09.05.2015, 12:32 | #10 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Ты заранее определяешь тело запроса, его начало. 1=1 это заглушка, которая позволяет сразу описать условие where в запросе. При этом запрос по факту эквивалентен обычному select from таблица, поскольку 1=1 заранее даст всегда True. Однако при такой заглушке ты к строке запроса можешь приписывать однотипные строки условия, впереди которых всегда будет стоять AND или OR, и это не нарушит синтаксиса, поскольку и слово where уже есть, и первый AND не нужно убирать из-за заглушки. Если бы не было заглушки то как сказал Аватар пришлось бы вычислять, были ли к запросу дописаны уже какие-то условия. Если были - писать AND если не были - не писать. Заглушка то все равно самой СУБД оптимизируется как правило, и не влияет на отбор, так что не мешает. А Append() это просто метод, добавляющий к списку запроса еще одну строку. Можно было написать sql.text:=sql.text+... Ну я вот Append() захотел. Попробуй в уме прокрутить запрос такой, как его строка будет меняться в зависимости от введенного в Эдиты, и ты поймешь в чем состоит роль заглушки. Т.е. заглушка призвана беречь запрос от нарушения синтаксиса SQL команды вне зависимости от того что ты там дальше по ходу программы будешь к запросу пририсовывать.
I'm learning to live...
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
поиск id в таблице | tanek | Помощь студентам | 7 | 11.03.2012 16:29 |
поиск по таблице | sid1868 | Помощь студентам | 1 | 10.11.2010 16:23 |
Поиск по таблице | Kemeron | Microsoft Office Access | 1 | 02.06.2010 21:55 |
Поиск в таблице | k1r1ch | Общие вопросы Delphi | 1 | 30.06.2009 15:57 |
Поиск в таблице | Voffka | БД в Delphi | 1 | 08.05.2007 01:16 |