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.