16. august 2005 - 22:00Der er
16 kommentarer og 1 løsning
Tælling af indlæg i en tråd pr. bruger
Halløj alle.
Jeg har et problem, for jeg har lavet et helt forum i PHP, inkl. admin-del osv., men når jeg vil slette en hel tråd, så skal den jo også tælle ned i brugernes antal af indlæg, når deres indlæg bliver slettet.
Så det jeg skal gøre er altså, at jeg skal først og fremmest finde ud af, hvem der har skrevet i den aktuelle tråd, og derefter finde ud af, hvor mange indlæg de har skrevet i den tråd. Dernæst skal jeg finde deres nuværende antal skrevne indlæg, og trække antallet af indlæg i denne tråd, fra antallet af skrevne indlæg ialt.
Problemet er, at den finder antallet af indlæg skrevet i tråden flere gange, den finder det én gang pr. indlæg personen har skrevet. Så hvis jeg fx har skrevet 3 indlæg, og en anden har skrevet 2, så finder den ud af 3 gange, at jeg har skrevet 3 indlæg, og 2 gange, at en anden har skrevet 2 indlæg.
Indtil videre ser mit script således ud:
$getposts = mysql_query("SELECT * FROM forum_posts WHERE id='$id' || main_id='$id'"); while ($myrow = mysql_fetch_array($getposts)) { $countposts = mysql_query("SELECT * FROM forum_posts WHERE navn='".$myrow[navn]."' && navn!='$last_bruger'"); $count = mysql_num_rows($countposts); echo $count;
while ($secrow = mysql_fetch_array($countposts)) { $user_id = $myrow[user_id]; }
$getindlaeg = mysql_query("SELECT * FROM brugere WHERE id='$user_id'"); while ($secrow = mysql_fetch_array($getindlaeg)) { $hisindlaeg = $myrow[indlaeg]; }
$indlaeg = $hisindlaeg - $count; $updateposts = mysql_query("UPDATE brugere SET indlaeg='$indlaeg' WHERE id='$user_id'"); $last_bruger = $myrow[brugernavn]; }
Hvordan gemmer du hvem som har skrevet eller svaret på et indlæg? F.eks. med et bruger_id? Så kan du jo lave et sql udtræk ala: SELECT count(forum_id) FROM forum_post WHERE bruger_id = (DEN BRUGER DU SØGER)
Har du et brugerid som gemmes hver gang en tråd oprettes eller besvares? Du kan få output ud sådan her: $query = mysql_query("SELECT count(forum_id) as antalPosts FROM forum_post WHERE bruger_id = $user"); if(mysql_num_rows($query)>0) { $row = mysql_fetch_assoc($query); echo $row['antalPosts']; }
Prøv af nøjes med dette: $query = mysql_query("SELECT count(id) as antalPosts FROM forum_posts WHERE navn='".$myrow[navn]."'"); if(mysql_num_rows($query)>0) { $row = mysql_fetch_assoc($query); echo $row['antalPosts']; }
og fjern: $getposts = mysql_query("SELECT * FROM forum_posts WHERE id='$id' || main_id='$id'"); while ($myrow = mysql_fetch_array($getposts)) {
Er du med på hvad vi laver? Hvis du gemmer brugerens navn hver gang han laver noget. Så er du med på vi kan tælle hvor mange gange hans navn er i tabellen forum_post, og ergo må det tal være lige med så mange tråde han har deltaget i eller oprettet.
Jeg har én tråd, som skal slettes 100% - og når jeg gør det, så skal brugernes antal skrevne indlæg ialt jo opdateres, så de indlæg, der var i den tråd, der skal slettes, bliver trukket fra. Og for at kunne finde ud af, hvor mange indlæg der er skrevet af den enkelte bruger, så er man jo nødt til at finde ud af, hvilke brugere der deltager i lige præcis dén tråd. Og derefter tælle, hvor mange indlæg han har skrevet i den tråd.
Test lige denne: $getposts = mysql_query("SELECT navn,count(id) as antalPosts FROM forum_posts WHERE id='$id' || main_id='$id' GROUP BY navn"); if(mysql_num_rows($query)>0) { while ($myrow = mysql_fetch_array($getposts)) { echo "Navn: " . $myrow['navn'] . " Antal indlæg: " . $myrow['antalPosts'] . "<br>"; } }
Det gjorde jeg i dén grad - jeg har valgt at benytte dit andet forslag med at droppe opdateringen. Dit forslag var langt mere simpelt, og det undrer mig virkelig, at jeg ikke selv kom på det... Men jeg har stadig lært meget af din hjælp, og jeg takker igen mange gange :)
For øvrigt kan du finde det på www.yumme.dk - for det tilfælde, at du vil se, hvad det drejer sig om.
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.