Strona 1 z 1

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

: 06 lipca 2009, 19:05
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ć?

: 12 lipca 2009, 15:43
autor: python
W mysql? Nie wiem czy to jest możliwe, jeśli tak to UNION.

: 12 lipca 2009, 20:56
autor: dworakex
Dokładniej? JOIN można użyć, ale zależy do czego?

: 12 lipca 2009, 21:09
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

: 15 lipca 2009, 21:24
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?

: 16 lipca 2009, 14:46
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

: 16 lipca 2009, 18:19
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.

: 16 lipca 2009, 18:23
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ć.

: 16 lipca 2009, 18:26
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).

: 17 lipca 2009, 10:50
autor: Shakez
Wielkie dzięki. Teraz powinienem sobie poradzić.