mboost-dp1
blog - optælle antal kommentarer i indlæg
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg er ved at lave min egen blog. Er stødt ind i det "problem" at jeg skal have talt hvor mange kommentarer der er postet til hvert blogindlæg.
Eksempel
Den sql kode jeg bruger når brugeren har valgt et blogindlæg er:
Men hvordan skriver jeg den kode om så den kan køre alle indlæg igennem, og tælle ud fra hvert indlæg som vist på eksemplet hvor mange kommentarer der er oprettet?
Spørg hvis jeg skriver russisk ;)
Eksempel
Den sql kode jeg bruger når brugeren har valgt et blogindlæg er:
SELECT a.*,c.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
JOIN comments AS c ON (a.content_id = c.comment_contentid)
WHERE content_shorturl ='". $shorturl ."'";
Men hvordan skriver jeg den kode om så den kan køre alle indlæg igennem, og tælle ud fra hvert indlæg som vist på eksemplet hvor mange kommentarer der er oprettet?
Spørg hvis jeg skriver russisk ;)
izym (2) skrev:Jeg bruger ikke SQL meget i hverdagen, men jeg vil gætte på, at det skal være noget i stil med:SELECT a.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
JOIN comments AS c ON (a.content_id = c.comment_contentid);
Hmm... Hvis jeg bruger dit forslag henter den kun 1 blogindlæg ud, og den tæller forkert under commentsCount. :/ Bruger selvfølgelig en while i min php kode når jeg trækker data ud.
Du skal bruge noget i stil med denne:
Nu kender jeg ikke dit table layout, men du skal ændre GROUP BY syntaxen, til det felt som er unikt for hver blog indlæg.
Kunne så udlede ovenstående ved lige at læse ordentligt, har også fjernet at den selecter c.*, da det ikke giver nogen mening.
EDIT: ovenstående er lavet udfra den antagelse at du bruger MySQL
SELECT a.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
LEFT JOIN comments AS c ON (a.content_id = c.comment_contentid)
GROUP BY a.content_id
Kunne så udlede ovenstående ved lige at læse ordentligt, har også fjernet at den selecter c.*, da det ikke giver nogen mening.
EDIT: ovenstående er lavet udfra den antagelse at du bruger MySQL
D_V (4) skrev:Du skal bruge noget i stil med denne:SELECT a.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
LEFT JOIN comments AS c ON (a.content_id = c.comment_contentid)
GROUP BY a.content_idNu kender jeg ikke dit table layout, men du skal ændre GROUP BY syntaxen, til det felt som er unikt for hver blog indlæg.
Kunne så udlede ovenstående ved lige at læse ordentligt, har også fjernet at den selecter c.*, da det ikke giver nogen mening.
EDIT: ovenstående er lavet udfra den antagelse at du bruger MySQL
Tak - Det virker helt fint indtilvidere :)
Ehm... Lige et til problem jeg opdagede. Hvordan sørger jeg for at den stadig kan hente informationer ud hvis brugeren har klikket på et blogindlæg hvor der ikke er skrevet en kommentar til? Den sql sætning jeg bruger til det er:
SELECT a.*,c.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
JOIN comments AS c ON (a.content_id = c.comment_contentid)
WHERE content_shorturl ='". $shorturl ."'"
soduno (6) skrev:Ehm... Lige et til problem jeg opdagede. Hvordan sørger jeg for at den stadig kan hente informationer ud hvis brugeren har klikket på et blogindlæg hvor der ikke er skrevet en kommentar til? Den sql sætning jeg bruger til det er:SELECT a.*,c.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a
JOIN comments AS c ON (a.content_id = c.comment_contentid)
WHERE content_shorturl ='". $shorturl ."'"
Fik det til at virke ved at benytte LEFT JOIN i stedet for Join. Er det forkert? :)
#7
Nej det er det ikke.
En JOIN kræver at begge sidder eksistere, hvor en LEFT JOIN kræver venstre side eksistere, og vice-versa for RIGHT JOIN..
LEFT/RIGHT defineres som at den tabel du joiner er på højre side af join.
Det har den effekt at når du bruger LEFT JOIN, så må resultatet af joinet gerne være NULL.
EDIT: det blev godt nok lidt snørklet at læse, håber det kan bruges.
Nej det er det ikke.
En JOIN kræver at begge sidder eksistere, hvor en LEFT JOIN kræver venstre side eksistere, og vice-versa for RIGHT JOIN..
LEFT/RIGHT defineres som at den tabel du joiner er på højre side af join.
Det har den effekt at når du bruger LEFT JOIN, så må resultatet af joinet gerne være NULL.
EDIT: det blev godt nok lidt snørklet at læse, håber det kan bruges.
D_V (8) skrev:#7
Nej det er det ikke.
En JOIN kræver at begge sidder eksistere, hvor en LEFT JOIN kræver venstre side eksistere, og vice-versa for RIGHT JOIN..
LEFT/RIGHT defineres som at den tabel du joiner er på højre side af join.
Det har den effekt at når du bruger LEFT JOIN, så må resultatet af joinet gerne være NULL.
EDIT: det blev godt nok lidt snørklet at læse, håber det kan bruges.
Okay - tak for det, så forstår jeg det meget bedre :)
apkat (10) skrev:Connection?
Hvad er det dog for en opførsel, at sidde og rate soduno som flamebait på hans fuldstændige relevante indlæg.
Og hvad så hvis ham gutten på eksperten ikke fattede spørgsmålet, så vidt jeg kan se er det formuleret på præcis samme måde.
Hmm... Er stødt ind i et andet problem siden sidst.
Skal kun have talt de kommentarer der har fået en accept. Dette gøres ved at give en række som hedder comment_accepted værdi 1. Tabellen som comment_accepted ligger i hedder comments.
Har prøvet følgende uden held:
Skal kun have talt de kommentarer der har fået en accept. Dette gøres ved at give en række som hedder comment_accepted værdi 1. Tabellen som comment_accepted ligger i hedder comments.
Har prøvet følgende uden held:
SELECT a.*,c.*, COUNT(c.comment_id) AS commentsCount
FROM content AS a, comments AS c
WHERE a.content_id = c.comment_contentid
AND content_shorturl='". $_GET['url'] ."'
AND c.comment_accepted = 1
Den simple løsning på den, er hvis du kun bruger 0 og 1 i `comment_accepted`
Så ændre du bare COUNT(c.comment_id) til SUM(c.comment_accepted)
Det kan dog diskuteres om det er den korrekte måde at gøre det på, hvis ovenstående ikke kan bruges må du lige sige til, så finder jeg nogen andre eksempler frem.
Btw... på ovenstående har jeg meget svært ved at se brugbarheden af at selecte comments.*
Er der en dybere tankegang bagved det ?
Så ændre du bare COUNT(c.comment_id) til SUM(c.comment_accepted)
Det kan dog diskuteres om det er den korrekte måde at gøre det på, hvis ovenstående ikke kan bruges må du lige sige til, så finder jeg nogen andre eksempler frem.
Btw... på ovenstående har jeg meget svært ved at se brugbarheden af at selecte comments.*
Er der en dybere tankegang bagved det ?
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.