webForumDet fria alternativet

Räkna kommentarer

14 svar · 435 visningar · startad av Leijonkungen

LeijonkungenMedlem sedan apr. 200428 inlägg
#1

Hej på er!

Skulle behöva hjälp med en sak. Besitter en ytterst liten kompetens på området jämfört med den de flesta av er har på detta forum, men börjar lära mig allt mer.

Jag har en nyhetsfunktion på min förstasida som visar de sex senaste nyheterna. Under varje nyhet skulle jag dock vilja räkna hur många kommentarer som finns, och om det inte finns några skriva ut "Bli först med att kommentera". Denna fråga kanske hör hemma mer under "PHP" nu när jag tänker efter, men anyway.

Tabellen jag hämtar nyheter i från heter just "nyheter" och kommentarerna ligger i "nyheterkommentarer". De sex nyheterna "repeatas" alltså från ett recordset som sorterar nyheterna efter senaste id-nummer.

Den funktion jag är ute efter liknar den som finns här: http://www.xlab.co.uk Fast utan "posted osv".

Använder MySQL 4, PHP 4 och Mac OS X 10.3.

Tacksam för hjälp!

UlfTMedlem sedan maj 20018 027 inlägg
#2

Re: Räkna kommentarer

Leijonkungen skrev:

Denna fråga kanske hör hemma mer under "PHP" nu när jag tänker efter, men anyway.

Nej, det var helt rätt postat. Använd dig av count i sql. Om vi tänker oss att kommentartabellen (i exemplet kallad "kommentarer"), kopplar kommentarerna till den nyhet de avser, med hjälp av nyckeln "newsId", så kan du räkna antalet kommentarer på följande vis:

select count(*) from kommentarer where newsId=3

om det nu var nyhet nummer tre du ville räkna kommentarerna för i det fallet.

LeijonkungenMedlem sedan apr. 200428 inlägg
#3

Det låter rimligt!
Men eftersom detta ska skapas dynamiskt måste det till något annat eller hur? 3:an funkar ju bara för just nyhet nummer tre. Testade med nyhet 246, som jag visste hade 4 kommentarer och fick på så sätt fram att det var just fyra stycken.

SELECT count(*) FROM nyhetskommentarer where nyheterID=246

Men om jag förstått saken rätt måste det till någon sorts php-kod inuti sql-satsen för att det ska bli dynamiskt vi varje post eller?
Så här skrivs exempelvis nyhetskategorin ut om det kan hjälpa:

<?php echo $row_rsNyheter['Kategori']; ?>
LeijonkungenMedlem sedan apr. 200428 inlägg
#4

Ingen som vet?
Det är ju en funktion som man ser på nära nog varenda blog nu för tiden. Är den väldigt avancerad?

UlfTMedlem sedan maj 20018 027 inlägg
#5

Det stämmer att du måste ha med en del annan kod för att ta fram vilket nyhetsid som du vill räkna kommentarer för. Exakt vilken kod som krävs, beror på situationen. Men man skulle ju kunna försöka beskriva det i stora drag:

  1. Hämta de sex senaste nyheterna från nyhetstabellen. Då hämtar du samtidigt deras id-värden, för dessa ska du ju använda senare när du räknar kommentarer.

  2. Loopa igenom nyheterna.
    - För varje nyhet: Skriv nyheten, och använd nyhetens id till att räkna kommentarer genom att generera en sql-sats likt den jag visade, där nyhetens id ingår. Gör du denna kommentarräkning samtidigt som du skriver ut nyheten, och därmed känner till nyhetens id, då borde det inte vara så svårt. :)

LeijonkungenMedlem sedan apr. 200428 inlägg
#6

Absolut, men hur ska SQL-satsen se ut då?
Det här fungerar ju uppenbarligen inte, men kan man få samma grej på något sätt?

SELECT count(*) FROM nyhetskommentarer where nyheterID='<?php echo $row_rsNyheter['nyheterID']; ?>'
UlfTMedlem sedan maj 20018 027 inlägg
#7

Leijonkungen skrev:

Absolut, men hur ska SQL-satsen se ut då?
Det här fungerar ju uppenbarligen inte, men kan man få samma grej på något sätt?

SELECT count(*) FROM nyhetskommentarer where nyheterID='<?php echo $row_rsNyheter['nyheterID']; ?>'

Använd inte apostrofer när det är numeriska värden i fälten.

MeleaMedlem sedan juli 20033 147 inlägg
#8

:)

SELECT count(*) FROM nyhetskommentarer where nyheterID = $row_rsNyheter[nyheterID]
LeijonkungenMedlem sedan apr. 200428 inlägg
#9

Nu börjar vi närma oss men är inte riktigt där ännu.
Inget felmeddelande denna gång, men nu skriver den ut 0 även fast det finns kommentarer under en viss nyhet. Den skriver alltså ut den senaste nyhetens antal kommentarer (0). Hur får jag den att blir unik för varje nyhet?

Här är koden som skriver ut nyheterna:

<?php do { ?>
          <span class="NyhetsHeaderRed"><?php echo $row_rsNyheter['Rubrik']; ?></span><BR>
		  <span class="Datum"><?php echo strftime('%e %B %Y', strtotime($row_rsNyheter['Datum'])); ?></span><BR>
		 
		  <BR>
		  <span class="Nyhetskategori">
<?php if (!empty($row_rsNyheter['nyhetsbild'])) { echo '<IMG src="./bilder/nyhetsbilder/' . $row_rsNyheter['nyhetsbild'] . '" hspace="2" vspace="2" align="' . $row_rsNyheter['bildplacering'] . '">'; } ?>

		  
		  <?php echo $row_rsNyheter['Kategori']; ?></span> | <?php echo nl2br($row_rsNyheter['fd_Text']); ?><BR>
          <BR>
          <A href="nyheter/read.php?nyheterID=<?php echo $row_rsNyheter['nyheterID']; ?>#kommentera"><IMG src="./bilder/kommentera_liten.gif" width="167" height="23" border="0" class="vitbild"></A>
          <BR>
          <BR><CENTER><IMG src="bilder/pix_dedede.gif" width="352" height="1"></CENTER>
          <BR>
          <BR>
          <?php } while ($row_rsNyheter = mysql_fetch_assoc($rsNyheter)); ?>

Som ni ser har jag en bild som man klickar på för att kommentera i dag. Men jag vill att man snabbt ska se om något kommenterat eller inte.

Jag hade ju tänkt att man kunde skriva ut denna kod mitt i loopen:

<?php echo $row_rsRakna['count(*)']; ?>

Som sagt, kom ihåg att jag är novis i jämförelse med er. :r

MeleaMedlem sedan juli 20033 147 inlägg
#10

Nått sånt här kanske.

<?php while ($row_rsNyheter = mysql_fetch_assoc($rsNyheter)); ?>
          <span class="NyhetsHeaderRed"><?=$row_rsNyheter['Rubrik']?></span><BR>
          <span class="Datum"><?=strftime('%e %B %Y', strtotime($row_rsNyheter['Datum']))?></span><BR>
         
          <BR>
          <span class="Nyhetskategori">

<?php if (!empty($row_rsNyheter['nyhetsbild'])) { echo '<IMG src="./bilder/nyhetsbilder/' . $row_rsNyheter['nyhetsbild'] . '" hspace="2" vspace="2" align="' . $row_rsNyheter['bildplacering'] . '">'; } ?>

          <?=$row_rsNyheter['Kategori']?></span> | <?=nl2br($row_rsNyheter['fd_Text'])?><BR>
          <BR>
          <A href="nyheter/read.php?nyheterID=<?=$row_rsNyheter['nyheterID']?>#kommentera"><IMG src="./bilder/kommentera_liten.gif" width="167" height="23" border="0" class="vitbild"></A>
          <BR>
          <BR><CENTER><IMG src="bilder/pix_dedede.gif" width="352" height="1"></CENTER>
          <BR>
          <BR>
<?
}
?>
LeijonkungenMedlem sedan apr. 200428 inlägg
#11

Men var i detta skulle antalet kommentarer skrivas ut menar du?
Jag vill alltså ersätta bilden med något i stil med:

X kommentarer. Skriv något du också!

eller, om det inte finns några kommentarer:

Bli först med att kommentera denna nyhet!

LeijonkungenMedlem sedan apr. 200428 inlägg
#12

*bump*
Please, jag behöver verkligen assistans med det här.
Jag vet att det finns sjukt kompetenta människor i detta forum!

LeijonkungenMedlem sedan apr. 200428 inlägg
#13

Ingen som vet...? :(

PaceMedlem sedan juni 20019 024 inlägg
#14

Förvänta dig inget svar efter tre sekunder, det finns folk som jobbar, studerar eller av annan orsak inte hinner svara på alla inlägg i raketfart.

Om du ska hämta antalet kommentarer till respektive nyhet så kan du lösa det genom en sql-fråga.

SELECT news.newsid, title, COUNT(commentid) AS numcomments 
FROM news
LEFT JOIN comments ON (comments.newsid = comments.newsid)
GROUP BY news.newsid
ORDER BY postdate DESC

Då får du förutom nyheten även ett fält (numcomments) som innehåller antalet kommentarer som gjorts till respektive nyhet.

LeijonkungenMedlem sedan apr. 200428 inlägg
#15

Ledsen om jag var pushig, det var inte meningen.
Din lösning fungerade ju givetvis utmärkt!
Stort tack för all hjälp och trevlig helg!

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)