W swojej bazie do tej pory wyszukiwałem po 1 kolumnie i nie było problemu (SELECT...LIKE nazwa="$xxx%")
Teraz jednak doszła druga tabela z alternatywnymi nazwami, opisami i słowami kluczowymi. Dlatego postanowiłem zrobić jedną kolumnę, którą w cronie będe aktualizował złączeniem wszystkich nazw i po tej kolumnie będę szukał zamiast za każdym razem łączyć kilka tabel.
No i mam problem.
Tabela1:
| idProducenta |symbol | nazwa | tekst_do_szukania
Tabela2
| idProducenta | symbol | idWpisu | wartosc | typ | pokaz_na_stronie
(klucze główne boldem)
wymyśliłem takie oto zapytanie:
UPDATE tabela1 SET `tekst_do_szukania` = CONCAT( nazwa, '||' ( SELECT group_concat( wartosc SEPARATOR '||' ) FROM tabela2 WHERE tabela2.idProducent = tabela1.idProducent AND tabela2.symbol = tabela1.symbol AND ( typ=1 OR typ=2) AND pokaz_na_stronie=1 GROUP BY idProducent, symbol ) )
Ale ono nie działa poprawnie, aktualizuje tylko te wpisy, w których jest coś w tym podzapytaniu, dla pozostałych ustawia tekst pusty.
zacząłem więc to zmieniać i doszedłem do czegoś takiego:
UPDATE tabela1 SET `tekst_do_szukania` = CONCAT( nazwa, '||' IF ( SELECT group_concat( wartosc SEPARATOR '||' ) FROM tabela2 WHERE tabela2.idProducent = tabela1.idProducent AND tabela2.symbol = tabela1.symbol AND ( typ=1 OR typ=2) AND pokaz_na_stronie=1 GROUP BY idProducent, symbol )<>"","COKOLWIEK","NIC") )
ale i tu praktycznie zawsze złącza z "NIC".
Ktoś może mi powiedzieć, co źle robię i czy to w ogóle jest możliwe, czy też tego się nie da zrobić i muszę w tym CRONie zrobić skrypt, które te 650 000 rekordów ręcznie rekord po rekordzie będzie jechał?