Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie wyników z kilku tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
XhtmlProject
Czy da się zrobić zapytanie w SQL z którego dostanę wyniki wybranych komórek z różnych tabel.

  1. $query = "SELECT kolumna FROM tabela WHERE id = ".$jakas_zmienna." ORDER BY kolumna";


Zmienne przypisane były z wcześniejszego zapytania do zupełnie innej tabeli. Ich wynik to cyfry wskazujące na daną komórkę z zapytania smile.gif

i teraz chciałem połączyć zapytanie SQL w taki sposób:

  1. $query = "SELECT kolumna FROM tabela WHERE id = ".$jakas_zmienna." ORDER BY kolumna + SELECT kolumna2 FROM tabela2 WHERE id = ".$jakas_zmienna2." ORDER BY kolumna";
i tak dalej ..

później to wszystko :

  1. $result = @mysql_query ($query);
  2. $num = mysql_num_rows ($result);
  3. if ($num > 0 ) {
  4. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  5. echo ' wyswietlam html z wynikami zapytania ';


wiem, trochę kombinuje pod górę - pytanie czy da się skleić podobne zapytanie .. questionmark.gif
everth
UNION
XhtmlProject
Cytat(everth @ 11.05.2011, 23:33:36 ) *
UNION


Problem w tym że robiąc to z UNION będę miał wszystkie wyniki w $row[0] - a ja chciałbym je pogrupować na $row[0] / $row[1] / $row[2] itd ..

czyli

  1. query = "SELECT kolumna FROM tabela WHERE id = ".$jakas_zmienna." ORDER BY kolumna
jako $row[0]
+
  1. SELECT kolumna2 FROM tabela2 WHERE id = ".$jakas_zmienna2." ORDER BY kolumna";
jako $row[1]

itd ..
everth
Jeśli nie mają części wspólnych to raczej nie. Ewentualnie mógłbyś pobrać te kolumny w podzapytaniach, ponumerować według kolejności wystąpienia i dokonać złączenia ale wydajne to raczej by nie było. Poprawne na pewno nie.
  1. SELECT P.kolumna1
  2. S.kolumna2
  3. FROM (
  4. SELECT kolumna1,
  5. @rn:=@rn+1 AS row_order,
  6. FROM
  7. (SELECT @rn:=0),
  8. tabela1
  9. WHERE twoje_warunki
  10. ) AS P LEFT JOIN
  11. (
  12. SELECT kolumna2,
  13. @re:=@re+1 AS row_order,
  14. FROM
  15. (SELECT @re:=0),
  16. tabela2
  17. WHERE twoje_warunki
  18. ) AS S ON (P.row_order=S.row_order)
  19. ORDER BY S.kolumna2

Powyższe to tylko ilustracja, nie testowałem i nie wiem nawet czy się wykona.
XhtmlProject
No nic pozostało mi zrobic zapytanie za zapytaniem zwalniając zasoby przy każdym z nich .. closedeyes.gif

Dzięki wielkie ..
thek
A to nie możesz zrobić "fikcyjnych" kolumn? wink.gif
Skoro wiesz, że masz do pobrania określoną kolumne z określonej tabeli i znasz ich miejsce oraz ilość, to utwórz w SELECT każdym pozostałe kolumny z wartością, która wskaże, że są fikcyjne smile.gif Jak? Przykład dla 3 tabel...
  1. SELECT kolumna1, NULL, NULL FROM tabela1 UNION SELECT NULL, kolumna2, NULL FROM tabela2 UNION SELECT NULL, NULL, kolumna 3 FROM tabela3
Tylko pamiętaj, że typ pola dla kolumny definiuje ZAWSZE pierwsze zapytanie w UNION, więc je dopasuj sobie odpowiednio...
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.