Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie wyników z kilku tabel, Wyłącznie jednym zapytaniem - z wybranych komórek
XhtmlProject
post 11.05.2011, 22:16:11
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 11.11.2005
Skąd: RuskieJaKraina

Ostrzeżenie: (0%)
-----


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


--------------------
Flash
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
everth
post 11.05.2011, 22:33:36
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


UNION


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
XhtmlProject
post 11.05.2011, 22:52:10
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 11.11.2005
Skąd: RuskieJaKraina

Ostrzeżenie: (0%)
-----


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 ..

Ten post edytował XhtmlProject 11.05.2011, 22:54:24


--------------------
Flash
Go to the top of the page
+Quote Post
everth
post 11.05.2011, 23:15:16
Post #4





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował everth 11.05.2011, 23:15:48


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
XhtmlProject
post 12.05.2011, 14:59:36
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 11.11.2005
Skąd: RuskieJaKraina

Ostrzeżenie: (0%)
-----


No nic pozostało mi zrobic zapytanie za zapytaniem zwalniając zasoby przy każdym z nich .. closedeyes.gif

Dzięki wielkie ..


--------------------
Flash
Go to the top of the page
+Quote Post
thek
post 12.05.2011, 15:05:40
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:28