Jump to content
Just nu i M3-nätverket

Räkna antal inlägg i en kategori (Mysql)


MrGarvin

Recommended Posts

Jag skulle behöva hjälp med en enkel mysql förfrågan, men som jag inte får till... någon intelligentare än jag vet nog bättre :D

 

Jag har två tabeller, en forum_topic och en forum_question.

 

forum_topic innehåller:

id_top

title_top

description_top

 

forum_question innehåller bl a:

id

catID (representerar id i forum_topic)

 

Vad jag skulle vilja nu är att lista mina kategorier (forum_topic.title_top) på en php-sida och dessutom ange hur många ämnen som finns i respektive kategori (antal rader forum_question)

 

Hur gör man det här på bästa sätt på sin PHP-sida?

 

Jag försökte en fråga i stil med:

SELECT * COUNT( forum_question.id ) AS item_count
FROM forum_topic
LEFT JOIN forum_question ON ( forum_topic.id_top = forum_question.catID )
GROUP BY forum_topic.title_top

men det fungerade inte alls det... är jag på rätt spår? Hur skriver jag för att skriva ut både kategorinamn och antal ämnen på sidan?

Link to comment
Share on other sites

ska där verkligen va en stjärna mellan "SELECT" och "COUNT"

 

ps: min SQL är lite rostig

Link to comment
Share on other sites

ach... så dumt... genast fick jag ut resultat..stort tack!

MEN det blev inte riktigt det jag var ute efter.

 

Det jag får ut är tydligen räkningen av antal frågor i tabellen forum_question för varje kategori, inte själva namnet på kategorin från forum_topic.

 

Hur printar jag ut både kategorinamnet och antalet frågor?

Link to comment
Share on other sites

I vilken tabell finns kategorinamnet och vad heter fältet?

 

EDIT: hittade nog :P

 

SELECT COUNT( forum_question.id ) AS item_count, forum_topic.title_top
FROM forum_topic
LEFT JOIN forum_question ON ( forum_topic.id_top = forum_question.catID )
GROUP BY forum_topic.title_top

 

Det borde väl gå?

Link to comment
Share on other sites

SELECT COUNT( forum_question.id ) AS item_count, forum_topic.title_top
FROM forum_topic
LEFT JOIN forum_question ON ( forum_topic.id_top = forum_question.catID )
GROUP BY forum_topic.title_top

 

Jo, det funkar utmärkt, fast blir omkastat... insåg med ditt förslag som grund att det gick utmärkt med

 

SELECT forum_topic.title_top, COUNT( forum_question.id ) AS item_count
FROM forum_topic
LEFT JOIN forum_question ON ( forum_topic.id_top = forum_question.catID )
GROUP BY forum_topic.title_top

...vilket jag tycker är märkligt. Varför funkar inte * då när man kan fråga efter ETT fält?

 

Nåja, nu fungerar DET! Tack så mycket. Sen är förstås frågan hur jag ska printa ut de två på webbsidan? Är inte så haj på mysql precis...

 

Hela min PHP-kod ser nu ut så här:

mysql_select_db($database_VXUbookstore, $VXUbookstore);
$query_rsTopics = "SELECT forum_top.title_top, COUNT( forum_question.id ) AS item_count
FROM forum_top
LEFT JOIN forum_question ON ( forum_top.id_top = forum_question.catID )
GROUP BY forum_top.title_top";
$rsTopics = mysql_query($query_rsTopics, $VXUbookstore) or die(mysql_error());
$row_rsTopics = mysql_fetch_assoc($rsTopics);
$totalRows_rsTopics = mysql_num_rows($rsTopics);
?>

 

Vad är det jag ska "eka ut" liksom?

Link to comment
Share on other sites

Då borde du väl eka ut $row_rsTopics och $totalRows_rsTopics? Det är ju de variablerna som du sparar det som kommer tillbaka från databasen, vad jag kan se :)

Link to comment
Share on other sites

Nä, det blir inte riktigt det.

$row_rsTopics blir bara "array"

$totalRows_rsTopics är bara antal rader med kategorier som listas (i detta fallet 4)

 

Det dumma är att jag vill ha ut ALL data från kategorierna (forum_top) samt antalet frågor (forum_question) som hör till varje kategori. Därav mitt tidigare försök att få in en * i SELECT för att få ut alla fälten.

 

I vanliga fall hade "echo $row_rsTopics['title_top']" skrivit ut titeln på kategorin (t ex Allmänt), men det funkar inte just nu. Det är det här jag inte fattar.

 

När jag gör min fråga i phpmyadmin så får jag ut både titel och antal så jag vet att frågan är rätt ställd i sig, MEN...hur får jag det skrivet på sidan??? Vad är det jag ska eka ut som motsvarar dessa svar? Fattar ingenting...

Link to comment
Share on other sites

Om det blir en array får man lista igenom arrayen med hjälp av en for-loop och i denna loop skriva ut alla resultat ... men väldigt svårt att se vad resultatet blir och vilka felmeddelanden som kommer enbart med den kod-biten, dessvärre :(

Link to comment
Share on other sites

Det dumma är att jag vill ha ut ALL data från kategorierna (forum_top) samt antalet frågor (forum_question) som hör till varje kategori. Därav mitt tidigare försök att få in en * i SELECT för att få ut alla fälten.

Det går inte att få allting (*) och t.ex. en COUNT, det är ju egentligen ganska logiskt.

 

Att du inte kan få med alla fält när du klumpar ihop datan med hjälp av title_top är att de andra fälten inte nödvändigtvis är unika utan kan ha olika värden inom gruppen. Du måste alltså GROUP_CONCAT:a ihop värdena eller GROUP:a på flera kolumner.

Link to comment
Share on other sites

Ok. Jag tror jag förstår problematiken... förutom att jag inte förstår varför jag inte kan få ut de olika svarsraderna... för de verkar ju inte vara ihopblandade liksom?

 

Med den tidigare koden så får jag ut följande svar från phpmyadmin:

 

post-11102-1228983601_thumb.png

 

som ni ser är ju all information snyggt och prydligt strukturerad i svaret. Att få ut dessa svarsrader kan väl inte vara svårt om, eller är det något jag inte fattar.

Link to comment
Share on other sites

Alltså.. vad jag inte vet hur jag får utskrivet på webbsidan är följande information:

 

Titeln på kategorin (forum_top.title_top) och antalet frågor i den kategorin (item_count)

i en loop som skriver ut dessa två värden tills alla kategorier är utskrivna.

 

Själva SQL-frågan fungerar ju som den ska (se min skärmdump från phpMyAdmin ovan), men vad ska jag, i ren PHP, nu ange för att få ut dessa två värden i en loop?

 

Tänk på att jag är en relativ nybörjare på PHP och provar mig fram :-)

Link to comment
Share on other sites

AH...äntligen... jag löste det själv!

 

Tänkte att det lät som att det var så enkelt att ni inte förstod varför jag inte fattade, så jag provade att helt enkelt ange radnamnet med variabelnamnet enligt följande:

 

echo $row_rsTopics['item_count'];

genast fick jag utskrivet antalet på rätt sätt. Tack för hjälpen!

 

Så... för den som vill ha lösningen klar så blev hela koden så här:

Mina två tabeller ser ut så här (delvis...det finns fler fält)

post-11102-1229006701_thumb.png

post-11102-1229006697_thumb.png

 

I dokumentets början ger jag php-koden för mysql:

mysql_select_db($database_VXUbookstore, $VXUbookstore);

$query_rsTopics = "SELECT forum_top.title_top, COUNT(forum_question.id) AS item_count
FROM forum_top
LEFT JOIN forum_question ON (forum_top.id_top = forum_question.catID)
GROUP BY forum_top.title_top
LIMIT 0 , 30";
$rsTopics = mysql_query($query_rsTopics, $VXUbookstore) or die(mysql_error());
$row_rsTopics = mysql_fetch_assoc($rsTopics);
$totalRows_rsTopics = mysql_num_rows($rsTopics);

 

I dokumentets body skriver jag sedan en tabell med en loop enligt följande:

<table width="100%" border="0" cellspacing="0" cellpadding="5">
	<?php do { ?>
	   <tr>
	  <td width="60%"><a href="category.php?catID=<?php echo $row_rsTopics['id_top']; ?>"><?php echo $row_rsTopics['title_top']; ?></a></td>
	  <td width="11%"><?php
	  echo $row_rsTopics['item_count'];
		?> ämnen</td>
	  </tr>

  <?php } while ($row_rsTopics = mysql_fetch_assoc($rsTopics)); ?>
  </table>

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...