[+] PHP, MYSQL -

Potrzebujesz pomocy z C, C++, perl, python, itp.
Shakez
Beginner
Posty: 179
Rejestracja: 18 stycznia 2009, 14:36
Lokalizacja: Wronki

[+] PHP, MYSQL - łączenie wyników zapytań

Post autor: Shakez »

Witam. Mam taki problem. Mianowicie chciałbym połączyć i posortować wyniki zapytań z kilku baz i tabel. Czy jest to możliwe? Jeśli tak to jak to zrobić?
python
Posty: 7
Rejestracja: 23 grudnia 2008, 22:11
Lokalizacja: Ruda ¦l±ska

Post autor: python »

W mysql? Nie wiem czy to jest możliwe, jeśli tak to UNION.
dworakex
Posty: 21
Rejestracja: 30 czerwca 2009, 15:11

Post autor: dworakex »

Dokładniej? JOIN można użyć, ale zależy do czego?
Awatar użytkownika
bagsiur
Beginner
Posty: 132
Rejestracja: 01 czerwca 2008, 22:12
Lokalizacja: Będzin

Post autor: bagsiur »

Można też połączyć ze sobą tabele wpisując po ,,from'' nazwy tabel, z których chcemy coś wyciągnąć. Kolumny poszczególnych tabel można połączyć ze sobą ich nazwami np.:

Kod: Zaznacz cały

where kolumna1=kolumna2
Shakez
Beginner
Posty: 179
Rejestracja: 18 stycznia 2009, 14:36
Lokalizacja: Wronki

Post autor: Shakez »

Więc dokładniej jest tak. Jest kilka baz na jednym serwerze. W każdej z tych baz jest kilka tabel o jednakowej strukturze. Chodzi mi o takie wyniki wyszukiwania z pośród wszystkich baz. No i najlepiej byłoby to posortować względem któregoś z pól.
Da sie czy nie?
Stawi
Beginner
Posty: 209
Rejestracja: 10 lutego 2007, 16:02
Lokalizacja: Kraków

Post autor: Stawi »

Jasne ze sie da:

Kod: Zaznacz cały

SELECT foo, bar, baz FROM baza1.tabela WHERE ...
UNION
SELECT foo, bar, baz FROM baza2.tabela WHERE ...
UNION
SELECT foo, bar, NULL FROM baza3.tabela WHERE ...
Jak chcesz sortowac to calosc w nawias i ORDER BY ;)

WAZNE: pola moga miec dowolne nazwy, ale musi byc ich wybranych tyle samo z kazdej z tabel, jak gdzies czegos brakuje to mozna wybrac nulla (tak jak jest to w baza3). Typy chyba tez powinny byc zgodne, nie pamietam co sie dizeje w innym przypadku.

PS: http://dev.mysql.com/doc/refman/5.1/en/union.html
WilK
Posty: 26
Rejestracja: 12 lipca 2009, 15:40
Lokalizacja: Warszawa

Post autor: WilK »

Dużo kombinacji jest w zależności od potrzeb, oprócz wyżej wymienionych -

SELECT tabela1.*, tabela2.* FROM tabela1, tabela2
i np.
WHERE tabela1.ID=tabela2.ID

Oprócz tego jeszcze w manualu o GROUP BY poczytaj w manualu.
Stawi
Beginner
Posty: 209
Rejestracja: 10 lutego 2007, 16:02
Lokalizacja: Kraków

Post autor: Stawi »

WilK pisze:SELECT tabela1.*, tabela2.* FROM tabela1, tabela2
i np.
WHERE tabela1.ID=tabela2.ID
Nigdy nie rób tak. Pomyśl sobie że masz np. 1 000 rekordów w każdej tabeli - wynikiem tego działania jest 1 000 000 wierszy i w każdym musi być sprawdzony warunek!
Jak już coś takiego robić to tylko przez:

Kod: Zaznacz cały

FROM tabela1 JOIN tabela2 USING(ID)
bo to korzysta z indeksów.
A w ogóle to to nie ma sensu, bo chcesz mieć dane z dwóch takich samych tabel o różnych danych - zapewne warunek WHERE lub JOIN nigdy nie zostanie spełniony. Już pomijam że po to wymyślili UNION żeby takich dziwactw nie wyprawiać.
WilK
Posty: 26
Rejestracja: 12 lipca 2009, 15:40
Lokalizacja: Warszawa

Post autor: WilK »

To po prostu był prosty przykład. Ja oczywiście w zupełnie innym zapytaniu używam (UNION i JOIN nie potrafiło mi dać takiego połączenia jak chciałem).
Shakez
Beginner
Posty: 179
Rejestracja: 18 stycznia 2009, 14:36
Lokalizacja: Wronki

Post autor: Shakez »

Wielkie dzięki. Teraz powinienem sobie poradzić.
ODPOWIEDZ