Avatar billede soduno Novice
10. oktober 2011 - 02:55 Der er 11 kommentarer og
1 løsning

Blog - at tælle indlæg

Jeg er ved at lave min egen personlige blog, og er stødt ind i at jeg skal have talt hvor mange
kommentarer der er skrevet til hvert indlæg. Kan godt få det til at virke hvis brugeren har valgt blogindlægget, men hvis jeg er på forsiden hvor alle blogindlæg bliver hentet ud begynder det at blive lidt tricky.

Den sql jeg bruger som virker 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 ."'

Samme sætning virker så bare ikke hvis jeg undlader WHERE statement og lader den køre
alle blogindlæg igennem. Hvilken måde er den bedste hvis jeg skal have talt alle de kommentarer der er skrevet til hvert blogindlæg på en gang og udskrevet dem (f.eks 6 kommentarer)?

VH Simon
10. oktober 2011 - 06:46 #1
Jeg er ikke sikker på, at helt har forstået problemstillingen.  Hvad har du stående i feltet content_shorturl?  Og hvad har du i variabelen $shorturl?  Et gæt er følgende:  $shorturl identificerer den bruger der er logget ind.  En bruger kan oprette nye blog-indlæg, og brugerens $shorturl bevares i content.content_shorturl.

Hvad vil du så have vist på forsiden?  Vil du vise et eller flere blogindlæg og for hvert blogindlæg vise alle kommentarer plus i et felt antallet afkommentarer?  Eller blot en oversigt over blogindlæg og antal kommentarer for hvert blogindlæg?  Er det således, at en bruger, med sin $shorturl, skal kunne se sine egne indlæg og antal kommentarer, men ikke skal kunne se andres indlæg, eller ikke skal kunne se antal kommentarer til andres indlæg?  Og at det er derfor du begrænser queryen til "WHERE content?shorturl = $shorturl"?

Når det så er dig selv der er logget ind, hvad er der så i $shorturl?  Ingenting, eller en speciel værdi, såsom $shorturl = 'migselv'?

Afhængig af din afklaring af ovenstående kunne man forestille sig et par løsninger.  For eksempel noget i retning af:

$query = "SELECT a.*,c.*, COUNT(c.comment_id) AS commentsCount FROM content AS a JOIN comments AS c ON (a.content_id = c.comment_contentid)";
if($url<>'migselv') $query .= " WHERE content_shorturl =$shorturl";

$result = mysql_query($query);
o.s.v.

Eller du undlader WHILE klausulen i din query og får således alle værdier ud, og når du så udskriver det på siden så anvender du enten alle værdierne, hvis det er dig selv, eller du anvender kun de værdier hvor $row['content_shorturl'] == $shorturl.

Men fortæl mere.  Jeg er så dårlig til at gætte.
Avatar billede soduno Novice
10. oktober 2011 - 10:25 #2
Jeg skal have vist de 3 seneste blogindlæg på forsiden plus et lille felt hvor der står hvor mange
kommentarer der er til hvert blogindlæg. Hvis jeg kører den forslåede query henter den kun et blog indlæg ud, og ikke alle 3.
Avatar billede soduno Novice
10. oktober 2011 - 10:27 #3
Short url er bare en måde jeg finder ud af hvilket blogindlæg brugeren har valgt, i stedet for
et id, så bruger jeg den forkortede url (omskrevet). Hvis det giver mening? :)
10. oktober 2011 - 12:09 #4
Det er stadig ikke krystalklart for mig.  Hvis det er mig, der er for tumpet, så glem mit indlæg og vent på indlæg fra de der bedre kan forstå dig.  Ellers må du forklare yderligere. 

Jeg forstår, at tabellen content indeholder et felt 'content_shorturl'.  Det felt bliver udfyldt, når der laves et nyt blogindlæg, og hvordan det sker er ligemeget for dette spørgsmål.  Er det korrekt?

Du må så have en side, ikke vist her, hvor en bruger får presenteret en liste over blogindlæg hvorfra han kan vælge et enkelt blogindlæg og klikke på en submitknap eller et link.  Derved kaldes der en ny side, og på den side sidder content_shorturl værdien for det valgte blogindlæg i $shorturl.  Er det også korrekt?

Når så en bruger har valgt et blogindlæg, hvad skal han så have at se?  Kun dette blogindlæg plus antal af kommentarer til dette blogindlæg, men ikke disse kommentarer?  Eller det valgte blogindlæg plus alle kommentarerne plus antallet af kommentarer?  Eller de tre seneste blogindlæg?  Hvis de tre seneste blogindlæg skal vises, hvordan ved programmet så hvilke blogindlæg der er de nyeste?

Hvad skal der så vises, når det ikke er en bruger men dig selv der bruger programmet?  Hvordan ved programmet, at det er dig og ikke en bruger?  Skal du se alle blogindlæg eller kun de tre seneste (og hvordan ved programmet så hvilke er de seneste?) og skal de enkelte kommentarer vises eller kun antal af kommentarer?

Som sagt, hvis det er for meget at spørge om, så skipper vi det.
Avatar billede soduno Novice
10. oktober 2011 - 14:57 #5
Jeg forstår, at tabellen content indeholder et felt 'content_shorturl'.  Det felt bliver udfyldt, når der laves et nyt blogindlæg, og hvordan det sker er ligemeget for dette spørgsmål.  Er det korrekt?
Korrekt!

Du må så have en side, ikke vist her, hvor en bruger får presenteret en liste over blogindlæg hvorfra han kan vælge et enkelt blogindlæg og klikke på en submitknap eller et link.  Derved kaldes der en ny side, og på den side sidder content_shorturl værdien for det valgte blogindlæg i $shorturl.  Er det også korrekt?

[b]Det er korrekt forstået. Og på den side hvor alle blogindlæg bliver præsenteret skal der være et
felt lige til højre for blogindlæget's overskrift hvor der står de antal kommentarer der er skrevet til
hvert indlæg, eks:[b]

håber det gav mere mening.

http://www.simonduun.com/blog.png
10. oktober 2011 - 15:42 #6
Jeg spurgte om et antal ting jeg er nødt til at vide for at forstå hvad du vil hvilket jeg må vide for at kunne foreslå en løsning.  Jeg spurgte hvad en bruger skal se når brugeren har valgt et blogindlæg:

(a) Skal brugeren se det ene blogindlæg eller, som nævnt i #2, de tre seneste blogindlæg?

(b) For det eller de blogindlæg brugeren skal se, skal brugeren også se kommentarerne, eller skal brugeren kun se antallet af kommentarer?

(c) Du skal så åbenbart se noget andet end brugeren. Skal du, som antydet i dit oprindelige spørgsmål, se alle blogindlæg eller de tre seneste (#2)?  Hvornår skal de tre seneste blogindlæg vises?

(d) Når de tre seneste blogindlæg skal vises, hvordan ved systemet hvor gamle blogindlæggene er og hvilke der derfor er de tre seneste?

(e) Hvordan kender systemet forskel på om det er en bruger eller dig der er logget ind?

Det har du ikke svaret på.  Skal vi opgive?  Er jeg for dum?
Avatar billede gentlebug Nybegynder
10. oktober 2011 - 20:38 #7
Avatar billede soduno Novice
10. oktober 2011 - 20:43 #8
Har løst problemet vha. newz.dk - var bare dårlig til at forklare mig selv her :)
Avatar billede gentlebug Nybegynder
10. oktober 2011 - 20:48 #9
Det er enormt dårlig stil du:
1) ikke oplyser du har fået et svar
2) selv napper pointne når en venlig sjæl har brugt en del tid på at hjælpe dig. (jeg har prøvet at søge på siden efter ordet tak - jeg fandt intet)
10. oktober 2011 - 21:30 #10
gentlebug, enig.  s_dunn, ja jeg var for dum.  Jeg skulle have holdt mig fra et indlæg der var dårligt forklaret.  Det gør jeg næste gang.
Avatar billede soduno Novice
10. oktober 2011 - 23:31 #11
Jeg kan godt lidt se hvad gentlebug mener hvad angår point, det beklager jeg, er det muligt at fortryde de point man har tilldelt?

Vil dog igen sige at jeg selv var for dårlig til at forklare problemet, og havde ingen ønske om at gøre dårlig stil!
Avatar billede NielsErikP Mester
10. oktober 2011 - 23:51 #12
Hej...
Ja... Man opretter et spørgsmål i samme katagori som denne, kalder spørgsmålet "Point til gentlebug", sætter det antal point ind som han skal have for hjælpen. I Det spørgsmål husker man at sige pænt tak for hjælpen til den der har hjulpet og brugt sin tid på en... Så lægger man samtidigt et link til det spørgsmål vedkommen har hjulpet på!! Sådan at fremtidige brugere evt. også kan få hjælp, hvis de søger løsning på samme spørgsmål som du har fået hjælp til!!
HUSK nu at sige tak, så kunne det jo være vedkommen alligevel godt gider bruge tid på dig en anden gang.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester