Topic: Поиск SQL запросом.

Пост о том как мною было найдено решение по этой теме. Может быть кто найдёт тут ответы для себя при поиске. Надеюсь не нарушу никаких правил форума, т.к. найти их не смог...
   Была поставлена задача создать универсальный поиск по всей БД с помощью SQL запроса. Сталкивался со многими проблемами во время реализации (синтаксис SQL для меня является новым и изучаю его всего около 2х месяцев ). Самой крупной стала проблема отображения запроса в tablegrid при наличии связи многие ко многим. К данному посту прилагаю схему БД и код запроса SQL.  Как мне кажется в данном примере будут рассмотрены все варианты связей...

SELECT
zurnal_zakaza.id,
status_zakaza.status_zakaza_pole,
status_sceta_zakaza.status_sceta_zakaza_pole,
file_scetaZakaza.nomer_file_scetaZakaza,
zurnal_zakaza.zakaz_zametka_pole,
strftime('%d.%m.%Y %H:%M', zurnal_zakaza.data_zakaza_pole),
GROUP_CONCAT(DISTINCT zurnal_zakaza_poziciya.zametka), 
GROUP_CONCAT(DISTINCT zapcasti.nazvanie_detali),                         
GROUP_CONCAT(DISTINCT info_stanka.vnutr_nazv_cpu),             
GROUP_CONCAT(DISTINCT firmi_postavsiki_zapcasti.firma)
                                                                                                        
FROM                         
zurnal_zakaza                                                                        
LEFT OUTER JOIN status_sceta_zakaza ON status_sceta_zakaza.id=zurnal_zakaza.id_status_sceta_zakaza 
LEFT OUTER JOIN status_zakaza ON status_zakaza.id=zurnal_zakaza.id_status_zakaza  
LEFT OUTER JOIN file_scetaZakaza ON zurnal_zakaza.id=file_scetaZakaza.id_zurnal_zakaza
LEFT OUTER JOIN zurnal_zakaza_poziciya ON zurnal_zakaza.id=zurnal_zakaza_poziciya.id_zurnal_zakaza 
LEFT OUTER JOIN zapcasti ON zapcasti.id=id_zapcasti    
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_zakaza_poziciya.id_info_stanka            
LEFT OUTER JOIN firmi_postavsiki_zapcasti ON firmi_postavsiki_zapcasti.id=zurnal_zakaza_poziciya.id_firmi_postavsiki_zapcasti
                                                                                                                                             
WHERE                                                            
(CASE WHEN '{poisk}' <> '' THEN                                       
zurnal_zakaza.zakaz_zametka_pole LIKE '%{poisk}%' or
zurnal_zakaza_poziciya.zametka LIKE '%{poisk}%' or 
zapcasti.nazvanie_detali LIKE '%{poisk}%' or
info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%' or 
zapcasti.nazvanie_detali LIKE '%{poisk}%' or                                                                                                                                                                             
firmi_postavsiki_zapcasti.firma LIKE '%{poisk}%'  
ELSE 1=1 END) 
AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_zakaza.data_zakaza_pole) = date({DateTimePicker1}) ELSE 1=1 END)AND
(CASE WHEN {ComboBox2} <> -1 THEN zapcasti.id_info_stanka = {ComboBox2} ELSE 1=1 END) AND
(CASE WHEN {ComboBox1} <> -1 THEN zapcasti.id_firmi_postavsiki_zapcasti = {ComboBox1} ELSE 1=1 END) 

GROUP BY zurnal_zakaza.id                                                       
ORDER BY zurnal_zakaza.id DESC

Ключевые слова: SQL поиск, SQL search, многие ко многим, many to many.

Post's attachments

Attachment icon Снимок.PNG 66.67 kb, 225 downloads since 2018-11-21 

Re: Поиск SQL запросом.

спасибо, обязательно пригодится!

Re: Поиск SQL запросом.

И прикладываю визуализацию данного решения.

Post's attachments

Attachment icon Снимок.PNG 105.09 kb, 272 downloads since 2018-11-24