Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]wybieranie z kilku tabel
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Wiem, ze to jest w manalu, ale probowalem na 10 sposobow i zawsze cos nie działalo. chcialbym wyszukiwac w 3 tabelach, obecnie zrobiłem dla jednej i co bym nie robił - zawsze wyskakuje bład, gdy probuje zrobic dla chociazby dwoch:
  1. $wynik = mysql_query('SELECT * FROM tabela1 where xx = "xxx" OR xx = "yyy"')

i jak teraz zrobic, zeby wyszukiwalo dodatkowo w tabela2 i tabela3 tych samych warunków?
bardzo prosze o pomoc

tak czytam wciąż o tym JOIN i dodam tylko, że tabele w żadnym stopniu nie są połączone. Po prostu chciałbym wyszukiwać z 3 tabel te rekordy, które w kolumnie 'xx' mają wpisane 'xxx' lub 'yyy'
jakby to zrobic?
Greg0
  1. SELECT * FROM tabela1 t1, tabela2 t2, tabela3 t3 WHERE t1.xx IN ('xxx','yyy') OR t2.xx IN ('xxx','yyy') OR t3.xx IN ('xxx','yyy')

lub
  1. SELECT * FROM tabela1 t1, tabela2 t2, tabela3 t3 WHERE (t1.xx, t2.xx, t3.xx) IN ('xxx','yyy')

Z tym że drugie zapytanie raczej zadziała inaczej niż pierwsze smile.gif W pierwszym mamy OR w drugim raczej AND. Moge się mylić, nie testowałem
nospor
Greg twoj sposob jest zly bo zwraca iloczyn kartezjanski

Cytat
tak czytam wciąż o tym JOIN i dodam tylko, że tabele w żadnym stopniu nie są połączone.
Skoro nie sa w zaden sposob polaczone to masz uzyc UNION zamiast join
Pcbecaw
sposób Grega niestety rzeczywiście zwraca iloczyn kartezjański.
nospor, o union również czytałem i jeśli nawet napisałem poprawy warunek, to coś nie działa, bo wywala błąd i pewnie jest to kwestia nawiasów. Coś takiego:
  1. $wynik = mysql_query('SELECT * FROM tabela1 where xx = "xxx" OR xx = "yyy" UNION SELECT * FROM tabela2 where xx = "xxx" OR xx = "yyy"')
  2. or die('Błąd zapytania');

i leci błąd zapytania. pewnie kwestia nawiasow, ale nie wiem jak to naprawić
próbowałem jeszcez coś takiego:
  1. $wynik = mysql_query('SELECT * FROM tabela1 where xx = "xxx" OR xx = "yyy"') UNION ('SELECT * FROM tabela2 where xx = "xxx" OR xx = "yyy"')
  2. or die('Błąd zapytania');

ale też wywala błąd składniowy tym razem (error)

po zrobieniu czegoś takiego:
  1. $wynik = mysql_query("(SELECT * FROM tabela1 where xx = 'xxx' OR xx = 'yyy') UNION (SELECT * FROM tabela2 where xx = 'xxx' OR xx = 'yyy')")
  2. or die('Błąd zapytania');

nie wywala erroru, ale bład zapytania. jakiś progres jest, tylko jak napisać to poprawnie?
nospor
No ale wyswietlaj blad a nie durny nic nie mowiacy tekst....
die(mysql_error());
i bedziesz wiedzial jaki masz blad

ps: liczba kolumn jakie zwracaja SELECT w union ma byc taka sama.
mmmmmmm
1. Zrezygnuj z * - naprawdę nie znam sytuacji, w której byłyby nieodzowne.
2. Jak już to zrobisz i przeczytasz dokładnie komunikaty, to się dowiesz, że liczba kolumn w 1 i w 2 SELECT musi być taka sama. Inne DBMS-y wymagają również zgodności typów - jak MySQL to nie wiem, bo jak ognia unikam UNION
3. Postaraj się zrezygnować z UNION bo to zło.
4. Jeśli nie możesz to sprawdź różnicę między UNION a UNION ALL
nospor
ad3) Że niby czemu to zlo? UNION wymyslono w konkretnym celu i w tym wlasnie celu jest tutaj uzyty. Nie popadaj w paranoje
mmmmmmm
98% przypadków użycia UNION wynika albo ze złego przemyślenia struktury, albo z dupowatego bazodanowca.
nospor
To ze ktos nie umie uzywac UNION to nie znaczy ze UNION to zlo.... idac twoim tokiem myslenia mozna powiedziec, ze mozg to zło, bo 98% pytajacych na forum źle go uzywa...

Ostatnio pisalem duzy projekt, gdzie UNION niesamowicie przyspieszylo mi pewne zapytania i to nie dlatego, ze baza byla zla...
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.