Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Szukanie w kilku niepowiązanych tabelach
Forum PHP.pl > Forum > Przedszkole
admix
Mam coś takiego:

  1. "SELECT * FROM tabela_1 AS t1, tabela_2 AS t2, tabela_3 AS t3
  2. WHERE t1.id = t2.id AND t2.id = t3.id AND ( t1.kol1 LIKE '$szukaj' OR t1.kol2 LIKE '$szukaj' OR t2.kol1 LIKE '$szukaj' OR t2.kol2 LIKE '$szukaj' OR t3.kol1 LIKE '$szukaj' OR t3.kol2 LIKE '$szukaj')"


Chce wyszukiwać w każdej z 3 tabel w 2 kolumnach - tabele nie są powiązane ze sobą.

W jaki sposób mogę wyszukać korzystając z jednego zapytania w 3 różnych tabelach nie związanych ze sobą - aby zapytanie zwróciło mi tylko te wiersze w których została znaleziona dana fraza ?

Z góry dzięki za odpowiedź.
nevt
np. tak
  1. SELECT * FROM (
  2. (SELECT pole_1 FROM tabela_1) UNION
  3. (SELECT pole_2 FROM tabela_2) UNION
  4. (SELECT pole_3 FROM tabela_3)
  5. ) AS tmp
  6. WHERE pole_1 LIKE '%fraza%';
admix
Cytat(nevt @ 21.02.2008, 08:02:02 ) *
np. tak
  1. SELECT * FROM (
  2. (SELECT pole_1 FROM tabela_1) UNION
  3. (SELECT pole_2 FROM tabela_2) UNION
  4. (SELECT pole_3 FROM tabela_3)
  5. ) AS tmp
  6. WHERE pole_1 LIKE '%fraza%';



To zapytanie zwraca tylko jedno pole tabeli, a nie cały wiersz...
nevt
tak trudno to przerobić? dopisz sobie * ... np.
  1. SELECT * FROM (
  2. (SELECT pole_1 AS szukamy, * FROM tabela_1) UNION
  3. (SELECT pole_2 AS szukamy, * FROM tabela_2) UNION
  4. (SELECT pole_3 AS szukamy, * FROM tabela_3)
  5. ) AS tmp
  6. WHERE szukamy LIKE '%fraza%';

ale to zadziała tylko jeżeli struktura tych tabel jest identyczna (tzn. ilość, kolejność i typy pól są jendnakowe),
jeżeli te tabele są różnie zbudowane (a podejrzewam że tak jest) musisz sam zdecydwoawać które pola dołączyć do rezultatów,, tak żeby dostać spójny zbiór wynikowy, np:
  1. SELECT * FROM (
  2. (SELECT pole_1, pole_1a, pole_1b, pole_1c FROM tabela_1) UNION
  3. (SELECT pole_2, pole_2a, pole_2b, pole_2c FROM tabela_2) UNION
  4. (SELECT pole_3, pole_3a, pole_3b, pole_3c FROM tabela_3)
  5. ) AS tmp
  6. WHERE pole_1 LIKE '%fraza%';
admix
Cytat(nevt @ 21.02.2008, 10:27:05 ) *
tak trudno to przerobić? dopisz sobie * ... np.
  1. SELECT * FROM (
  2. (SELECT pole_1 AS szukamy, * FROM tabela_1) UNION
  3. (SELECT pole_2 AS szukamy, * FROM tabela_2) UNION
  4. (SELECT pole_3 AS szukamy, * FROM tabela_3)
  5. ) AS tmp
  6. WHERE szukamy LIKE '%fraza%';

ale to zadziała tylko jeżeli struktura tych tabel jest identyczna (tzn. ilość, kolejność i typy pól są jendnakowe),
jeżeli te tabele są różnie zbudowane (a podejrzewam że tak jest) musisz sam zdecydwoawać które pola dołączyć do rezultatów,, tak żeby dostać spójny zbiór wynikowy, np:
  1. SELECT * FROM (
  2. (SELECT pole_1, pole_1a, pole_1b, pole_1c FROM tabela_1) UNION
  3. (SELECT pole_2, pole_2a, pole_2b, pole_2c FROM tabela_2) UNION
  4. (SELECT pole_3, pole_3a, pole_3b, pole_3c FROM tabela_3)
  5. ) AS tmp
  6. WHERE pole_1 LIKE '%fraza%';


Dzięki za pomoc ! - próbowałem to przerobić w sposób który podałeś, ale wyszukiwało tylko w pierwszych polach - trzeba było dopisać jeszcze "(...) AS tmp WHERE pole_1 LIKE '%$fraza%' OR pole_1a LIKE '%$fraza%' ...itp."
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.