1 (edited by metatron 2018-07-05 05:47:42)

Topic: sql поиск в разных таблицах БД

Тема поднималась тут неоднократно. Но разобраться так и не смог. БД на msql. Требуется организовать поиск в разных связанных таблицах. я так понимаю что решение кроется в обледенении таблиц но решить вопрос так и не смог. Вот запрос до которого я дошёл.

SELECT
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
info_stanka.data_vvoda,
firmi_postavsiki.firma_postavki
ceha.ceh
                                                                                                                   
FROM                           
info_stanka (????)                                     

WHERE           
(info_stanka.invent_nomer LIKE '%{Edit1}%') OR
(info_stanka.vnutr_nazv_cpu LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(firmi_postavsiki.firma_postavki LIKE '%{Edit1}%') OR
(ceha.ceh LIKE '%{Edit1}%');

Re: sql поиск в разных таблицах БД

К сожалению не ясно, как именно связаными таблицы info_stanka, firmi_postavsiki и ceha между собой.
Если предположить, что есть внешний внешний ключ на таблицу ceha в таблице info_stanka (info_stanka.id_ceha), а также info_stanka.id_firmi_postavsiki


то SQL запрос будет таким

SELECT 
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
info_stanka.data_vvoda,
firmi_postavsiki.firma_postavki
ceha.ceh
                                                                                                                    
FROM                            
info_stanka

LEFT OUTER JOIN ceha ON ceha.id=info_stanka.id_ceha                                    
LEFT OUTER JOIN firmi_postavsiki ON firmi_postavsiki.id=info_stanka.id_firmi_postavsiki 

WHERE           
(info_stanka.invent_nomer LIKE '%{Edit1}%') OR
(info_stanka.vnutr_nazv_cpu LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(firmi_postavsiki.firma_postavki LIKE '%{Edit1}%') OR
(ceha.ceh LIKE '%{Edit1}%');

Если не получиться, можете приложить ваш проект.

Dmitry.

Re: sql поиск в разных таблицах БД

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

SELECT
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
info_stanka.data_vvoda,
firmi_postavsiki.firma_postavki,
ceha.ceh,                                 
tip_satanka.tip_stanka
                                                                                                                   
FROM                           
info_stanka,firmi_postavsiki,ceha,tip_satanka                                 

WHERE
info_stanka.id_firmi_postavsiki = firmi_postavsiki.id and
info_stanka.id_ceha = ceha.id and
info_stanka.id_tip_satanka = tip_satanka.id and
((info_stanka.invent_nomer LIKE '%{Edit1}%') OR
(info_stanka.vnutr_nazv_cpu LIKE '%{Edit1}%') OR
(info_stanka.nazv_stanka LIKE '%{Edit1}%') OR
(info_stanka.zavod_nomer LIKE '%{Edit1}%') OR
(firmi_postavsiki.firma_postavki LIKE '%{Edit1}%')OR
(ceha.ceh LIKE '%{Edit1}%')OR
(tip_satanka.tip_stanka LIKE '%{Edit1}%'));

Re: sql поиск в разных таблицах БД

Такой запрос не будет работать правильно, поэтому я удалил предыдущий ответ.

Dmitry.

Re: sql поиск в разных таблицах БД

Странно но работает. Правда я только сейчас осознал что придется каким то образом переделывать кнопки предназначенные для редактирования записи так как они перестали работать. Проект приложил.Раздел перечень станков.

Post's attachments

Attachment icon 01raw.rar 413.41 kb, 320 downloads since 2018-07-05 

Re: sql поиск в разных таблицах БД

поправил ваш проект, изменил SQL запрос, иначе поиск не работал бы, если бы один из словаей был бы пустым. Также в SQL запрос добавил id поле из основной таблицы, это необходимо, чтобы кнопка редактирования работала, т.о. система знает id записи, которую необходимо отредактировать или удалить.

Post's attachments

Attachment icon 01raw_fixed.zip 40.4 kb, 327 downloads since 2018-07-05 

Dmitry.

Re: sql поиск в разных таблицах БД

Итоговый запрос стал таким

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
info_stanka.vnutr_nazv_cpu,
strftime('%d.%m.%Y', zurnal_cpu.data),
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci),                              
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,                
zurnal_cpu.vipolnenie_raboti                      
                                                                                                              
FROM                                    
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka
                    
WHERE                                   
(info_stanka.invent_nomer LIKE '%{poisk}%') OR     
(info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%') OR                                                                 
(zurnal_cpu.pricina_ostanovki LIKE '%{poisk}%') OR    
(zurnal_cpu.code_error LIKE '%{poisk}%') OR                
(zurnal_cpu.tekst_oshibki LIKE '%{poisk}%') OR                              
(zurnal_cpu.vipolnenie_raboti LIKE '%{poisk}%');

Помогите пожалуйста добавить сюда поиск zurnal_cpu.data через DateTimePicker и поиск по чекбоксу zurnal_cpu.smena.

Re: sql поиск в разных таблицах БД

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

Dmitry.