Afisare informatii din mai multe tabele

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje: 328

Afisare informatii din mai multe tabele

Salut. Revin cu alta postare.
Nu am idee cum as putea sa fac urmatorul lucru:
Vreau sa selectez din tabelul X Y Z informatii care sa le afisez in functie de data, cele mai recente informatii sa apara.
Pe pagina unde doresc sa le afisez vreau sa mi se afiseze maxim 15 rezultate in total, nu din fiecare tabel.

Acest lucru este ceva de genul ce informatii sau adaugat recent pe site :)
Cum as putea sa fac acest lucru, habar nu am de unde sa incep :D

MarPlo Mesaje: 4343
Salut
1. Daca intre acele tabele exista o reatie de legatura, cu coloana comuna, poti sa faci un Select cu LEFT JOIN si cu LIMIT 15.
Cam asa:

Cod: Selectaţi tot

$sql ="SELECT t1.col1, t1.col2, t2.col_x, t3.col_y FROM table_1 AS t1
 LEFT JOIN table_2 AS t2 ON t1.id = t2.id
 LEFT JOIN table_3 AS t3 ON t3.col_id = t1.id
 ORDER BY t1.col_data DESC limit 15";
2. Daca intre tabele nu e o legatura comuna, poti sa faci ca in acest exemplu:

Cod: Selectaţi tot

$sql ="SELECT t1.col1, t1.col2, t2.col_x, t3.col_y
 FROM table_1 AS t1, table_2 AS t2, table_3 AS t3
 ORDER BY t1.col_data, t2.col_data,  t3.other_col DESC limit 15";

cadou Mesaje: 328
nu exista legatura comuna intre ele, sunt putine coloane ce sunt in toate tabelele...
Am incercat ceva dupa exemplu, dar nu am reusit ...

Cod: Selectaţi tot

$noutati = $dbh->query("SELECT bancuri.banc, intrebari.intrebare, mesaje.mesaj FROM `bancuri` AS A, `intrebari` AS B, `mesaje` AS C ORDER BY A.data, B.data,  C.data DESC limit 15");

while ($r = $noutati->fetch(PDO::FETCH_ASSOC))
{
echo $r['banc'];
}
imi da eroare la randul cu while:

Cod: Selectaţi tot

Fatal error: Uncaught Error: Call to a member function fetch() on boolean in .... Stack trace: #0 {main} thrown in 
Nu as putea in loc de "bancuri.banc" sa selectez tot din tabelul banc ? ( la fel pentru toate tabelele )

MarPlo Mesaje: 4343
Incearca asa:

Cod: Selectaţi tot

$sql ="SELECT A.banc, B.intrebare, C.mesaj FROM `bancuri` AS A, `intrebari` AS B, `mesaje` AS C ORDER BY A.data, B.data,  C.data DESC limit 15";
Daca nu merge, testeaza instructiunea sql direct in phpmyadmin si vezi ce eroare indica sa o corectezi.

- Cand se face select in mai multe tabele, poti selecta toate coloanele din unul (de exemplu: A.* ) doar daca nici una din acele coloane (din tabeul A) nu se afla in vreunul din celelalte tabele.

cadou Mesaje: 328
Multumesc frumos pentru raspunsuri, dar am facut altceva :D un tabel separat unde bag ce informatii sau adaugat in celelelate tabele :D si am scapat de bataia de cap cu selectarea din mai multe tabele, aleg din unul singur ceea ce doresc :D

Subiecte similare