[php, Smarty] Hvordan telle?

[php, Smarty] Hvordan telle?

Innleggav iatros » ons 23.04.2008 18:44

Jeg har en database med artikler, og en annen med kommentarer. Jeg vil trekke ut de tre nyeste artiklene, og vise hvor mange kommentarer artikkelen har fått.

Nå har jeg prøvd "alle" mulige kombinasjoner av LEFT JOIN og jeg vet ikke hva. Noen som har (den helt sikkert super-enkle) løsningen?

Kommentartabellen har feltet artikkelid som matcher 'id' i artikkeltabellen.

Kode: Merk alt
   $query = "
      SELECT * FROM artikler
      WHERE id > 0
      AND public='1'
      ORDER BY id DESC
   ";
   $display['recent'] = $db->GetAll($query . "LIMIT 0,3");


Brukerens avatar
medlem i 233 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav MrMinit » ons 23.04.2008 18:49

Mulig jeg misforstår, men
Kode: Merk alt
mysql_num_rows($query)
bør vel funke?

Edit; altså teller du radene med den - og derfra blir vel veien lett..?

Brukerens avatar
medlem i 230 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav iatros » ons 23.04.2008 18:51

Må vel ha inn noe mer i spørringen også, nå henter den jo bare ut artiklene, og ser ikke i kommentartabellen i det hele tatt...

Brukerens avatar
medlem i 233 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav stefus » ons 23.04.2008 19:38

Hei! Prøv dette:
Kode: Merk alt
SELECT art.*, count(*) AS kommentarantall
      FROM artikler AS art, kommentarer AS kom
      WHERE art.id > 0
      AND art.public='1'
      AND art.id = kom.artikkelid
      GROUP BY art.id
      ORDER BY id DESC

Trikset er 'GROUP BY'

Brukerens avatar
medlem i 222 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav iatros » ons 23.04.2008 21:21

Edit: Hadde klaget min nød i et nytt innlegg, men det var bare meg som rotet litt (igjen)

Nå funka det bra

Edit2: Men ikke helt 100% ;)

Ser at koden ikke henter ut de tre siste artiklene, den henter de to nyeste og en tredje som er gammel. Den viser heller ikke antall kommentarer på den første artikkelen, men den viser korrekt på de to andre!

Artikkel 1 (0 kommentarer) - men artikkelen har 1 kommentar
Artikkel 2 (2 kommentarer) - riktig
Artikkel 3 (1 kommentar) - riktig antall, men lenge siden den ble publisert, altså ikke artikkel nr. 3


Hentet ut kommentarantallet slik i php, $display['kommentarantall'] = $kommentarantall;
og presenterer de i template-filen som {$kommentarantall}

Brukerens avatar
medlem i 233 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav decodex » tor 24.04.2008 1:17

Først av alt, jeg ser ikke noe referanse til datofelt i spørringene så langt for artikler. Sortere etter ID på artikler gir ingen garanti at man får nyeste først, ettersom MySQL står fritt til å gjenbruke IDer for artikler som er slettet tidligere. Anbefaler derfor at man ordner med en datokolonne for artikler som brukes for sorteringen.

Ellers ville jeg anbefalt å bruke LEFT JOIN, ikke implisitt INNER JOIN som stefus bruker i sitt eksempel, i tillegg til at tellingen burde skje spesifikt på ID for kommentarer.

Kjapt pseudo-eksempel:

Kode: Merk alt
SELECT a.*, COUNT(k.id) AS kommentarantall FROM artikler a LEFT JOIN kommentarer k ON k.artikkelid = a.id WHERE a.public = '1' GROUP BY a.id ORDER BY a.dato DESC

Brukerens avatar
medlem i 218 måneder
 

Re: [php, Smarty] Hvordan telle?

Innleggav iatros » tor 24.04.2008 3:49

Fabelaktig, denne siste funket glimrende.
Har et datofelt som det nå sorteres på. Takk for tipset om 'gjenbruk' av ID-er.

Nydelig, nok en gang løser ting seg med hjelp herfra :)

Brukerens avatar
medlem i 233 måneder
 


Returner til PHP



Hvem er i Forumene

Registrerte brukere: Google [Bot]