Avatar billede grippen Nybegynder
24. oktober 2008 - 21:25 Der er 26 kommentarer og
1 løsning

En masse counts til en Tabel

Hey eksperter.

Har nu fået en side op hvor alle mine billeders navne og deres kategori_id ligger. Selve billeder ligger i en mappe.

Men på min forside, har jeg en masse kategoriér.

F.eks. Ferie, arbejde, fest og en masse andre. ca 30 stk's

Jeg ville så gerne ud for hver kategori f.eks Ferie ha at der står Ferie (20)  20 skal stå for at der findes 20 billeder i databasen som hører under denne kategori.

Jeg kan kun den meget tunge måde, med en query for hver eneste kategori, så ville høre om der ikke findes en nemmere metode?

På forhånd tak
Avatar billede kjeldsted Novice
24. oktober 2008 - 21:29 #1
Hm. Kan ikke helt huske. Men det er vist nok:

SELECT COUNT(billeder) AS billederKategori FROM tabel

Mener det er sådan noget.
Avatar billede kjeldsted Novice
24. oktober 2008 - 21:30 #2
Såfremt at rækkerne med billede navner hedder 'billeder', kategorien hedder 'Kategori' og tabellen hedder 'tabel'.
Avatar billede hmortensen Nybegynder
24. oktober 2008 - 21:51 #3
Formoder at du har to tabeller, en med kategorier og en med billeder som reffer til kategorierne.

SELECT
  COUNT(*) antal, k.name
FROM
  billeder b
INNER JOIN
  kategorier k
ON
  b.kat_id = k.id GROUP BY k.id;
Avatar billede grippen Nybegynder
24. oktober 2008 - 23:46 #4
har en tabel der hedder pictures

i den har jeg:

picture_id
file_name
category_id
Avatar billede grippen Nybegynder
25. oktober 2008 - 00:06 #5
Men er det nemmere at man laver en register tabel som + eller - med antal billeder til hver kategori? for tror det bliver en for stor load hvis den skal counte dem hver gang siden bliver loadet?
Avatar billede hmortensen Nybegynder
25. oktober 2008 - 00:16 #6
Hvor mange billeder er der tale om?
Kan du få ovenstående til at virke?
Avatar billede grippen Nybegynder
25. oktober 2008 - 00:21 #7
vi taler 1000+ :)

har ikke prøvet ovenstående da jeg helst gerne først ville finde den rigtige løsning, vil nødigt ende med 100 % cpu load..
Avatar billede hmortensen Nybegynder
25. oktober 2008 - 00:22 #8
Hvis det ikke er flere burde der ikke være noget problem.
Avatar billede grippen Nybegynder
25. oktober 2008 - 00:24 #9
Men den skal så lave 30 forespørgsler med din ik ?
Avatar billede grippen Nybegynder
25. oktober 2008 - 00:27 #10
altså på forsiden tænker jeg på. Da jeg som sagt har 30 kategorier der..
Avatar billede hmortensen Nybegynder
25. oktober 2008 - 00:35 #11
Nej, én.
Avatar billede grippen Nybegynder
25. oktober 2008 - 00:49 #12
$sql = SELECT COUNT(*) antal, category FROM pictures INNER JOIN category ON category_id = k.id GROUP BY category_id;

fest(echo $sql eller?)  familie(echo $sql ?)

lyder bare forkert :/

min kategoy tabel ser sån her ud:

category_id
category  (det er navnet som kategorien hedder f.eks fest)

Og pictures

picture_id
file_name
category_id
Avatar billede hmortensen Nybegynder
25. oktober 2008 - 13:51 #13
Flg. bør virke og udskrive "Katnavn (antal)":

$sql = mysql_query("SELECT COUNT(*) antal, c.category cat FROM pictures p INNER JOIN category c ON p.category_id = c.id GROUP BY c.id");

while($row = mysql_fetch_assoc($sql))
{
  echo $row['cat'] . " (" . $row['antal'] . ")<br />";
}
Avatar billede grippen Nybegynder
25. oktober 2008 - 15:04 #14
okay, Tjekker så snart jeg er hjemme.
Avatar billede grippen Nybegynder
26. oktober 2008 - 02:19 #15
Hey, lang dag :(

Nu når jeg sidder og kigger på det. Så forstår jeg ikke helt. c.category    hvor kommer cét fra? og pictures p  hvor kommmer pét fra? og nu skriver antal, jeg har ikke i nogen tabeller en række der hedder antal. Håber du vil hjælpe da jeg ikke har brugt inner join før eller count for den sags skyld, kun insert, update, select and so on.
Avatar billede hmortensen Nybegynder
26. oktober 2008 - 10:29 #16
Der er aliases:

SELECT Feltnavn f FROM tabel

Så kan man blot udskrive f, da det er et alias af Feltnavn.
Avatar billede grippen Nybegynder
26. oktober 2008 - 17:59 #17
Kopiere jeg koden direkte, virker den ikke.
Avatar billede hmortensen Nybegynder
26. oktober 2008 - 19:53 #18
Hvad får du af fejl?
Avatar billede kjeldsted Novice
26. oktober 2008 - 19:56 #19
$sql = mysql_query("SELECT COUNT(*) AS NumOfPics, navn FROM billeder INNER JOIN ketagorier ON billeder.kategori=kategorier.navn GROUP BY kategorider.id");

Dette virker i så fald at tabellen med kategorier hedder 'kategorier', tabellen med billeder hedder billeder og at der i tabellen kategorier er et navn med kategori der hedder navn.

Du kan så udskrive med:

while($row = mysql_fetch_assoc($sql))
{
  echo $row['navn']."; indeholder ".$row['NumOfPics']." billede(r).<br>";
}
Avatar billede grippen Nybegynder
26. oktober 2008 - 20:01 #20
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Og det må jo være at sql'en er forkert.

Men som jeg læser sql'en så betyder det:

den skal tælle antal (som ikke er en række i min database) , category_id fra pictures og så hopper jeg af.

Som sagt har jeg disse 2 tabeller:

pictures:
------------------
picture_id
file_name
category_id  - dette id blir brugt til at finde ud af hvilken category det hører id


category:
------------------
category_id - dette er hvad category_id fra pictures bruger til at finde hinanden
category    - dette er bare navnet på categori'en
Avatar billede grippen Nybegynder
26. oktober 2008 - 20:05 #21
Jeg prøver lige din kjeldsted
Avatar billede grippen Nybegynder
26. oktober 2008 - 20:15 #22
Hvis jeg retter koden til:

$sql = mysql_query("SELECT COUNT(*) AS NumOfPics, category_id FROM pictures INNER JOIN category ON pictures.category_id = category.category_id GROUP BY category.category_id");

while($row = mysql_fetch_assoc($sql))
{
  echo $row['file_name'] . " indeholder " . $row['NumOfPics'] . " billede(r).<br>";
}
?>


så får jeg også warning mysql_fetch_assoc
Avatar billede hmortensen Nybegynder
26. oktober 2008 - 20:34 #23
Ret til flg.:

$sql = mysql_query("SELECT COUNT(*) antal, c.category cat FROM pictures p INNER JOIN category c ON p.category_id = c.id GROUP BY c.id") or die(mysql_error());
Avatar billede grippen Nybegynder
26. oktober 2008 - 20:37 #24
så kom vi nærmere hmortensen ;)

Unknown column 'c.id' in 'on clause'
Avatar billede hmortensen Nybegynder
26. oktober 2008 - 20:39 #25
Nok mere korrekt sådan her så:

$sql = mysql_query("SELECT COUNT(*) antal, c.category cat FROM pictures p INNER JOIN category c ON p.category_id = c.category_id GROUP BY c.category_id") or die(mysql_error());
Avatar billede grippen Nybegynder
26. oktober 2008 - 20:43 #26
hmortensen, jeg kan ikke takke dig nok for den hjælp, rigtig mange tak!
det virker nu :)
og kjeldsen tak for forsøget.

Så hmortensen smider du et svar :) ?
Avatar billede hmortensen Nybegynder
26. oktober 2008 - 20:44 #27
Det var så lidt.
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