webForumDet fria alternativet

Räkna hur många bilder en viss kategori innehåller

PHP

12 svar · 780 visningar · startad av Emil W

Medlem sedan mars 2009512 inlägg
Frågan#1

Hur ska man göra så att att han visar hur många bilder en kategori innehåller ?

Jag har aldrig hållit på med sånt förut.

Jag har en tabell med kategorier och en tabell med adresserna till bilderna.

Typ

Rubrik Antal bilder

Järnväg 5 st
Träd 1 st
Ormar 0 st

Medlem sedan juni 20034 013 inlägg
#2

SELECT COUNT(*) AS antal, kategori FROM bilder
LEFT JOIN kategorier USING (kategoriID)
GROUP BY bildID

Medlem sedan mars 2009512 inlägg
#3

Hur jag ändrar sql-satesen ?

så ser tabellerna ut

kgalleri

id | rubrik

galleri

id | katid | rubrik | adress | kl

Medlem sedan juni 20034 013 inlägg
#4

SELECT COUNT(*) AS antal, kgalleri.rubrik FROM galleri
LEFT JOIN kgalleri ON (galleri.katid = kgalleri.id)
GROUP BY kgalleri.id

(missade ett k på slutet.)

Medlem sedan maj 2010117 inlägg
#5

Detta borde fungera:

SELECT 
  kg.rubrik, count(*) antal
FROM
  kgalleri kg LEFT OUTER JOIN galleri g on (kg.id = g.katid)
GROUP BY
  kg.rubrik

Antagande: katid i tabellen galleri är kgalleris id.
Antagande: tabellen galleri innehåller bilderna och kgalleri rubrikerna du vill gruppera efter. Koden fungerar även om en rubrik ej har några bilder.

Medlem sedan mars 2009512 inlägg
#6

Den skriver ut att det finns 2 bilder i alla kategorier fast det inte finns.

Det finns bara 2 bilder i en kategori.

Vad kan vara felet ?

Jag lägger lite kod,så ser ni.

$id = mysql_query("SELECT COUNT(*) AS antal, kgalleri.rubrik FROM galleri
LEFT JOIN kgalleri ON (galleri.katid = kgalleri.id)
GROUP BY kgalleri.id");

$ha = mysql_result($id,0,'antal');

while($row = mysql_fetch_array($iaa))
{
$i++;
if ($i % 2)
echo('<tr class="uddarad">');
else
echo('<tr class="jamnrad">');
echo "<td><a href=visabilder.php?katid=".intval($row['id']).">".htmlspecialchars($row['rubrik'])."</a></td>";
echo "<td>$ha</td>";
echo "</tr>";
}
echo "</table>";
Medlem sedan maj 2010117 inlägg
#7

Vad säger den om du testar min SQL istället?

Medlem sedan mars 2009512 inlägg
#8

Den visar 1 på alla istället.

Medlem sedan maj 2010117 inlägg
#9

Kan du lägga in lite exempeldata i de tabeller du postade tidigare?

Medlem sedan jan. 2005953 inlägg
#10

Du sätter värdet på $ha utanför loopen, den kommer då ha samma värde för varje varv i loopen.

Medlem sedan mars 2009512 inlägg
#11

metalboy skrev:

Du sätter värdet på $ha utanför loopen, den kommer då ha samma värde för varje varv i loopen.

Hur ska jag göra då ?

newseed skrev:

Kan du lägga in lite exempeldata i de tabeller du postade tidigare?

Jag har redan gjort det.

Medlem sedan aug. 201035 inlägg
#12

Nu kanske det är lite sent med svar på den här frågan, men.. Här har du nåt som borde fungera =)

SELECT kategori.rubrik, COUNT( galleri.id )
FROM kategori
LEFT JOIN galleri ON kategori.id = galleri.katid
GROUP BY kategori.rubrik
ORDER BY kategori.id ASC

 $con = mysql_connect("server","user","password");
 if (!$con)
 {
      die('Could not connect: ' . mysql_error());
 }

 mysql_select_db("database_of_choice", $con);

 $result = mysql_query("SELECT kategori.rubrik AS rubrik, COUNT(galleri.id) as counter FROM kategori LEFT JOIN galleri ON kategori.id=galleri.katid GROUP BY kategori.rubrik ORDER BY kategori.id ASC");

 while($row = mysql_fetch_array($result))
 {
     echo $row['rubrik'] ."&nbsp; &nbsp; " . $row['counter']."st";
     echo "<br />";
 }

 mysql_close($con);
Medlem sedan mars 2009512 inlägg
#13

Tack så mycket för hjälpen :)

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)