1 (edited by memult 2017-03-19 18:33:42)

Topic: Некорректный поиск

Добрый день.
Необходим поиск по всем полям таблицы - реализовал через SQL запрос. Все работает,если только для поиск используется поле Edit:

skan.prim LIKE '%{edSearch}%' OR
skan.klslovo LIKE '%{edSearch}%' or

Мне нужна еще фильтрация по дате и по комбобоксу. Добавляю строки:

(CASE WHEN {Combobox1}=-1 THEN 1=1 ELSE skan.id_aktive={Combobox1} END) OR
skan.prim LIKE '%{edSearch}%' OR
skan.klslovo LIKE '%{edSearch}%' or
skan.data >= {DateTimePicker1} or skan.data <= {DateTimePicker2}

Результат некорректный. Другими словами нужно иметь поиск по текстовым полям (будут искаться через поле EdSearch),по дате и по комбобоксу одновременно.


UPD: вроде как решилось, поправьте, если не так.

WHERE

(CASE WHEN '{edsearch}' <> '' THEN skan.prim LIKE '%{edsearch}%'  ELSE 1=1 END) AND
(CASE WHEN '{edsearch}' <> '' THEN skan.klslovo LIKE '%{edsearch}%'  ELSE 1=1 END) AND
(CASE WHEN {Combobox1} <> -1 THEN skan.id_aktive = {Combobox1} ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(skan.data) >= date({DateTimePicker1}) ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker2} IS NOT NULL THEN date(skan.data) <= date({DateTimePicker2}) ELSE 1=1 END)

Re: Некорректный поиск

Здравствуйте.


Все верно, здесь можете найти пример SQL запроса со всеми доступными компонентами
http://myvisualdatabase.com/forum/misc. … download=1

Dmitry.

Re: Некорректный поиск

Дмитрий, подскажите что не так в этих двух строчках?

(CASE WHEN '{edsearch}' <> '' THEN skan.prim LIKE '%{edsearch}%'  ELSE 1=1 END) AND
(CASE WHEN '{edsearch}' <> '' THEN skan.klslovo LIKE '%{edsearch}%'  ELSE 1=1 END) AND

Работает поиск работает корректно только по одному полю из двух..

Re: Некорректный поиск

memult
В вашем запросе здесь используется логика AND, т.е. будут показаны записи в которых есть совпадения в skan.prim и skan.klslovo одновременно, в вашем случае необходимо использовать логику OR

((CASE WHEN '{edsearch}' <> '' THEN skan.prim LIKE '%{edsearch}%'  ELSE 1=1 END) OR (CASE WHEN '{edsearch}' <> '' THEN skan.klslovo LIKE '%{edsearch}%'  ELSE 1=1 END)) AND
Dmitry.

Re: Некорректный поиск

Столкнулся с такой проблемой. Необходим поиск по нескольким таблицам, фильтрация по комбоксу и по дате действия. При выборе параметров из комбоксов в гриде показываются записи согласно запроса, но каждая запись дублируется одинаковое количество раз равное общему количеству действий всех записей(записанные в таблице editaction). Так же при выборе даты действия показываются абсолютно все записи, даже те, где ни какие действия не были записаны. Сразу извиняюсь за код, я новичок)

SELECT

"$autoinc", 
"Account".register, 
F1.statusaccount,  
"Account".Email,
F2.location,  
F3.Add,        
F4.Country,
"Account".balance,       
f5.editaction,                                                                   
"Account".id   

FROM "Account", "Editaction"    
             
LEFT OUTER JOIN statusaccount F1 ON F1.id="Account".id_statusaccount 
LEFT OUTER JOIN location F2 ON F2.id="Account".id_location               
LEFT OUTER JOIN Add F3 ON F3.id="Account".id_add                               
LEFT OUTER JOIN country F4 ON F4.id="Account".id_country 
LEFT OUTER JOIN editaction f5 ON f5.id="Account".id_Editaction   
                                          
WHERE                            

(CASE WHEN {Combo_statusaccount}=-1 THEN 1=1 ELSE {Combo_statusaccount}="Account".id_statusaccount END)
AND
(CASE WHEN {Combo_location}=-1 THEN 1=1 ELSE {Combo_location}="Account".id_location END)              
AND
(CASE WHEN {Combo_add}=-1 THEN 1=1 ELSE {Combo_addmoney}="Account".id_add END)   
AND
(CASE WHEN {Combo_country}=-1 THEN 1=1 ELSE {Combo_country}="Account".id_country END)          
AND 
(CASE WHEN {DateTimePicker3} IS NOT NULL THEN date(editaction.editaction) = date({DateTimePicker3}) ELSE 1=1 END)

Re: Некорректный поиск

hutley
Приложите пожалуйста ваш проект (zip файл без exe и dll)

Dmitry.

Re: Некорректный поиск

Отправил Вам по электронной почте

Re: Некорректный поиск

hutley wrote:

Отправил Вам по электронной почте

Попробуйте данный SQL запрос

SELECT

"$autoinc", 
strftime('%d.%m.%Y',"Account".register), 
F1.statusaccount,  
"Account".Email,                     
F2.location,  
F4.Country,
"Account".balance,       
f5.editaction,                                                                   
"Account".id   

FROM "Account"  
             
LEFT OUTER JOIN statusaccount F1 ON F1.id="Account".id_statusaccount 
LEFT OUTER JOIN location F2 ON F2.id="Account".id_location                                       
LEFT OUTER JOIN country F4 ON F4.id="Account".id_country 
LEFT OUTER JOIN editaction f5 ON f5.id="Account".id_Editaction   
                                                  
WHERE                            

(CASE WHEN {Basesearchstatusaccount}=-1 THEN 1=1 ELSE {Basesearchstatusaccount}="Account".id_statusaccount END)
AND
(CASE WHEN {Basesearchlocation}=-1 THEN 1=1 ELSE {Basesearchlocation}="Account".id_location END)              
AND
(CASE WHEN {Combo_country}=-1 THEN 1=1 ELSE {Combo_country}="Account".id_country END)          
AND 
(CASE WHEN {DateTimePicker3} IS NOT NULL THEN date(f5.editaction) = date({DateTimePicker3}) ELSE 1=1 END)

Но в принципе я не вижу смысла в данном случае использовать SQL запрос. Используйте кнопку с действием "Поиск", в ее настройках просто укажите компоненты, с помощью которых вы бы хотели фильтровать записи и выберите необходимые поля из таблиц, которые бы вы хотели видеть в результате поиска.

Dmitry.