| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
rev909
Data înscrierii: 26/Mai/2002
Mesaje: 3
|
| Trimis: Joi Oct 21, 2004 9:25 am Titlul subiectului: Selectare din 2 tabele |
|
|
Am 2 tabele. Una contine informatiile despre niste poze. Sa zicem ca are urmatoarea forma:
id - nume_poza - url_poza
Cealalta tabela este tabela cu comentariile pentru poze. Forma:
id - id_poza - comentariu
Cand afisez poza e simplu, dau un "SELECT comentariu WHERE id_poza = $id" (unde $id este id-ul pozei tocmai afisate) si afisez comentariile asociate cu acea poza.
Intrebarea mea este daca se poate ca printr-un singur SELECT sa iau lista numelor pozelor si numarul de comentarii pentru fiecare? Adica vreau sa am lista pozelor in forma urmatoare:
Camping la munte - 3 comentarii
Pescuit in lac - 0 comentarii
Urcam la deal - 4 comentaii
samd
Ma ajuta cineva? |
|
| Sus |
|
PCPbSlack
Data înscrierii: 23/Noi/2003
Mesaje: 143
Locație: Ploiesti
|
| Trimis: Joi Oct 21, 2004 11:22 am Titlul subiectului: |
|
|
select *,count(*) as nr_comentarii from poze,comentarii where poze.id=comentarii.id_poza group by comentarii.id_poza
selectul de mai sus ar trebui sa rezolve problema ta. ca un mic exemplu
<?php
$query = "select *,count(*) as nr_comentarii from poze,comentarii where poze.id=comentarii.id_poza group by comentarii.id_poza";
$result = mysql_query($query) or die();
while($r = mysql_fetch_assoc($result)) {
print $r['nume_poza'].' - '.$r['nr_comentarii'].' comentarii';
}
?>
sper sa mearga :) |
|
| Sus |
|
rev909
Data înscrierii: 26/Mai/2002
Mesaje: 3
|
| Trimis: Joi Oct 21, 2004 12:25 pm Titlul subiectului: |
|
|
| Merge dar problema e ca nu afiseaza pozele cu 0 comentarii. |
|
| Sus |
|
arond
Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1
|
| Trimis: Joi Oct 21, 2004 12:34 pm Titlul subiectului: |
|
|
Cod: SELECT poze.nume_poza,poze.url_poza,COUNT(comentarii.id) AS count FROM poze LEFT JOIN comentarii ON comentarii.id_poza=poze.id GROUP BY poze.id
De multe ori e mai clar sa folosesti JOIN-uri explicite in locul celor implicite (ca cel folosit de psoftinc in postul anterior).
Aici smecheria este LEFT JOIN (include toate inregistrarile din primul tabel si numai cele din al doilea tabel care se potrivesc conditiei din clauza ON). Cu alte cuvinte, iti va include si pozele care nu au nici un comentariu.
In cazul query-ului propus de posftinc, JOIN-ul implicit e echivalent cu INNER JOIN (selecteaza numai inregistrarile din primul si al doilea tabel care se conformeaza conditiei din clauza WHERE).
Numa' bune. |
|
| Sus |
|
PCPbSlack
Data înscrierii: 23/Noi/2003
Mesaje: 143
Locație: Ploiesti
|
| Trimis: Joi Oct 21, 2004 12:40 pm Titlul subiectului: |
|
|
| sunt nevoit sa predau stafeta lui arond, pentru ca are dreptare. eu nu am luat in calcul si pozele fara comentarii :) |
|
| Sus |
|
rev909
Data înscrierii: 26/Mai/2002
Mesaje: 3
|
| Trimis: Vin Apr 08, 2005 5:55 pm Titlul subiectului: |
|
|
Revin si eu dupa o jumat' de an cu o continuarea intrebarii... :)
Ce se intampla daca am in plus si categorii de poze?
Categoriile sunt intr-o tabela categorii in urmatorul format:
id - nume
Iar in poze am campul id_categorie care imi arata din care categorie face parte poza respectiva.
Vreau sa afisez asa:
Nume poza - Nume categorie poza - Numar comentarii
Evident si pozele cu 0 comentarii. Am tot incercat dar nu am reusit sa dibuiesc cum se face LEFT JOIN-ul in cazul cand am mai mult de 2 tabele.
Mersi de ajutor. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |