Skocz do zawartości

Wybieranie danych z kilku tabel w jednym zapytaniu


Dominik23
 Udostępnij

Rekomendowane odpowiedzi

Witam.

Mam problem z pobieraniem rekordów z wielu tabel w jednym zapytaniu SQL.

Na samym początku potrzebowałem sume wszystkich rekordów z kilku tabel, aby móc postronicować wyniki ale miałem kłopot ze zliczeniem wszystkich rekordów za pomocą count(*) z kilku tabel na raz, ponieważ w odpowiedzi zwraca wszystkie możliwe kombinacje, to sobie stworzyłem oddzielne zapytania do każdej tabeli (nie wiem czy to jest wydajne ale końcowy wynik mi wyszedl ;))

$tab="tabela1";

$tab2="tabela2";

$tab3="tabela3";

$tab4="tabela4";

$tab5="tabela5";

$tab6="tabela6";

$tab7="tabela7";

$query = mysql_query("SELECT count(*) FROM $tab");

$row = mysql_fetch_array($query);

$query2 = mysql_query("SELECT count(*) FROM $tab2");

$row2 = mysql_fetch_array($query2);

$query3 = mysql_query("SELECT count(*) FROM $tab3");

$row3 = mysql_fetch_array($query3);

$query4 = mysql_query("SELECT count(*) FROM $tab4");

$row4 = mysql_fetch_array($query4);

$query5 = mysql_query("SELECT count(*) FROM $tab5");

$row5 = mysql_fetch_array($query5);

$query6 = mysql_query("SELECT count(*) FROM $tab6");

$row6 = mysql_fetch_array($query6);

$query7 = mysql_query("SELECT count(*) FROM $tab7");

$row7 = mysql_fetch_array($query7);

$size= $row['count(*)'];

$size2 = $row2['count(*)'];

$size3 = $row3['count(*)'];

$size4 = $row4['count(*)'];

$size5 = $row5['count(*)'];

$size6 = $row6['count(*)'];

$size7 = $row7['count(*)'];

$size9 = $size + $size2 + $size3 + $size4 + $size5 + $size6 + $size7;

To może nie jest meritum problemu, zaczne od struktury tabel która jest identyczna dla wszystkich tabel tylko nazwy tabel i ich zawartość jest inna!

Chce je połączyć w jedno zapytanie, przy jednej tabeli wyglądało to tak:

$naStronie = 1; // jeden rekord

if($_GET['podstronka']) $kat = $_GET['podstronka'];

else $kat = 0;

$start = $kat*$naStronie;

$que = mysql_query("SELECT * FROM $tab ORDER BY `$url_id` DESC LIMIT $start, $naStronie");

while($wie = mysql_fetch_array($que)) {

$url_id = $wie['url_id'];

$url = $wie['url'];

$typ = $wie['typ'];

$PR = $wie['PR'];

$token = $wie['token'];

$chek = $wie['chek'];

echo "Wyświetlenie np. jednego adresu url $url";

}

Po niżej chciałem je połączyć w jednym zapytaniu, ale nie idzie!!

$que = mysql_query("SELECT * FROM $tab, $tab2, $tab3, $tab4, $tab5, $tab6, $tab7 ORDER BY `$url_id` DESC LIMIT $start, $naStronie");

Proszę o pomoc bo jestem zielony :/

Witryna Biznesu - najlepsza promocja biznesu w sieci.

Odnośnik do komentarza
Udostępnij na innych stronach

dałbym

UNION ALL

a pozostała cześć jest OK

sam union jeżeli dodasz dwie identyczne tabele o 100 rekordach zwróci 100 rekordów

UNION ALL zwróci 200 rekordów :D

To taka mała subtelna różnica i czesto wychodzi jak sie dokładnie sprawdza wynika albo przechodzi sie z wersji developerskiej do prawdziwych danych ;)

Aha ! Do zielonego !

1) Poczytaj troche dokumentacji do SQL-a bo zginiesz marnie bez podstaw.

2)Jak wklejasz kod to zaznacz ze to kod (taka ikonka nad polem edycyjnym, pierwsza z prawej ;)

3)Czasami warto zastosować instrukcje iteracji (tzw. PĘTLE)

Edytowane przez Maximus Marius
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności