Avatar billede kyppo Nybegynder
16. august 2005 - 22:00 Der 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];
}
Avatar billede jakobdo Ekspert
16. august 2005 - 22:06 #1
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)
Avatar billede kyppo Nybegynder
16. august 2005 - 22:08 #2
Ændring. Scriptet ser 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);

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 = $secrow[indlaeg];
$last_bruger = $secrow[brugernavn];
}

$indlaeg = $hisindlaeg - $count;
$updateposts = mysql_query("UPDATE brugere SET indlaeg='$indlaeg' WHERE id='$user_id'");
}
Avatar billede kyppo Nybegynder
16. august 2005 - 22:17 #3
Det lyder fornuftigt nok, men hvad skal jeg skrive for at få et output ud af det?
Avatar billede jakobdo Ekspert
16. august 2005 - 22:20 #4
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'];
}
Avatar billede jakobdo Ekspert
16. august 2005 - 22:20 #5
Avatar billede kyppo Nybegynder
16. august 2005 - 22:27 #6
Ja, hver gang nogen skriver et indlæg (nyt eller svar er underordnet), bliver deres brugerid gemt i databasen.

Jeg bakser lige med det, du har givet mig, men p.t. giver den mig stadig resultatet flere gange, eftersom den jo skal finde brugeren først.

Jeg har ændret koden til dette:

$getposts = mysql_query("SELECT * FROM forum_posts WHERE id='$id' || main_id='$id'");
while ($myrow = mysql_fetch_array($getposts)) {
$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'];
}
}

Jeg håber ikke, jeg er alt for besværlig :)
Avatar billede jakobdo Ekspert
16. august 2005 - 22:37 #7
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)) {
Avatar billede kyppo Nybegynder
16. august 2005 - 22:38 #8
Jamen den skal jo finde brugernavnene i den pågældende tråd.
Avatar billede jakobdo Ekspert
16. august 2005 - 22:38 #9
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.
Avatar billede jakobdo Ekspert
16. august 2005 - 22:38 #10
Jeg tror jeg har misforstået dig så.
Forklar lige igen?
Avatar billede kyppo Nybegynder
16. august 2005 - 22:41 #11
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.

Forstår du nu?
Avatar billede jakobdo Ekspert
16. august 2005 - 22:44 #12
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>";
    }
}
Avatar billede jakobdo Ekspert
16. august 2005 - 22:45 #13
Jeg forstår dig godt!
Men i stedet for at opdatere et sted hvor mange indlæg og tråde en bruger har lavet, kunne du bruge løsningen:

$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'];
}

Den vil altid fortælle hvor mange indlæg en bruger har lavet.
Så skal du ikke opdatere et felt eller hvad du nu gør.
Avatar billede kyppo Nybegynder
16. august 2005 - 22:53 #14
Den er dælme hjemme :) Tusind, tusind tak for din hjælp! Kan du evt. lige oprette et svar, så du kan få dine mere end velfortjente point? :)
Avatar billede jakobdo Ekspert
17. august 2005 - 09:40 #15
Svar! :o)
Håber også du lærte noget nyt!
Avatar billede kyppo Nybegynder
17. august 2005 - 14:21 #16
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.
Avatar billede jakobdo Ekspert
17. august 2005 - 14:28 #17
Nice! :o)
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