login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Count probleem. (Opgelost)

Offline edwin87 - 17/04/2007 11:32
Avatar van edwin87Nieuw lid Ik ben nu bezig met een nieuws systeem en wil graag van elke categorie het aantal nieuwsberichten optellen.

Nu heb ik 2 tabellen,
nieuws_cat
*c_id
nieuws
*n_cat_id

Deze worden aan elkaar gekoppeld.

Met de volgende query wou ik het gaan optellen maar ik krijg steeds de waarde terug van alle nieuws items, wat natuurlijk niet de bedoeling is.
  1. $query = mysql_query(" SELECT
  2. COUNT(n.n_id) AS totaal
  3. FROM nieuws_cat c
  4. INNER JOIN nieuws n
  5. ON (c.c_id = n.n_cat_id);
  6. ");


Wat doe ik hier nu fout?
Ik hoop dat jullie me kunnen helpen!
Bijvoorbaat dank,
Edwin

15 antwoorden

Gesponsorde links
Offline Ultimatum - 17/04/2007 11:38
Avatar van Ultimatum PHP expert Je moet er ook nog een WHERE inzetten, dus iets in deze richting:

WHERE category = ". $_GET['cat']

En $_GET['cat'] bevat dan de category id
Offline edwin87 - 17/04/2007 11:51
Avatar van edwin87 Nieuw lid Het is een normaal overzicht. Dus zou die hele get toch niet nodig hebben of wel?

Het moet toch gewoon kunnen met een join?
Offline Gerard - 17/04/2007 13:42
Avatar van Gerard Ouwe rakker 'GROUP BY' is hier het toverwoord.
Offline ikkedikke - 17/04/2007 16:00
Avatar van ikkedikke PHP expert Waarom gebruik je niet:
SELECT `id`,(SELECT COUNT(1) FROM `Nieuws` WHERE `nieuws`.`id` = `categorieen`.`id`) FROM `categorieen`
Offline laars - 17/04/2007 16:17
Avatar van laars Onbekend maar dan zonder backticks en misschien een 'AS aantal_berichten' voor de subquery.
Offline ikkedikke - 17/04/2007 17:33
Avatar van ikkedikke PHP expert Zolang je toch zeker bent van mysql moet je die dingen gewoon laten staan, anders kan mysql gek gaan doen als je bijvoorbeeld 'as count' achter de subquery zou zetten.
((..subquery...) as`count` zal wel goed gaan)
Offline Gerard - 17/04/2007 18:02
Avatar van Gerard Ouwe rakker Omdat er schijnbaar geen notie wordt gemaakt van mijn hint zal ik het maar even voorkauwen:
  1. SELECT nieuws_cat.naam, COUNT(*) AS aantal
  2. FROM nieuws INNER JOIN nieuws_cat
  3. ON nieuws.n_cat_id = nieuws_cat.n_cat_id
  4. GROUP BY nieuws_cat.naam
SQL Dump
Offline Ibrahim - 17/04/2007 18:17
Avatar van Ibrahim PHP expert @proximus, de SQL dump van je is beveiligd met een sleutel 
Offline Gerard - 17/04/2007 18:57
Avatar van Gerard Ouwe rakker Die sleutel zit erbij in de url, wanneer hij er toch om vraagt dan is het 'appel'.
Offline edwin87 - 19/04/2007 12:46
Avatar van edwin87 Nieuw lid Ik heb nu die sql query toegepast maar ik krijg nog steeds bij elke query hetzelfde resultaat terwijl sommige categorien toch een ander getal hoort te staan.
  1. $query = mysql_query(" SELECT COUNT(nieuws.n_id) AS aantal
  2. FROM nieuws
  3. INNER JOIN nieuws_cat
  4. ON nieuws.n_cat_id = nieuws_cat.c_id
  5. GROUP BY nieuws_cat.c_id
  6. ");
  7. $row = mysql_fetch_array($query);
  8. $count = $row['aantal'];
Offline Gerard - 19/04/2007 13:42
Avatar van Gerard Ouwe rakker Hoe kun je nu in godsnaam weten welk getal bij een sectie hoort als je alleen de aantallen opvraagt?
Offline edwin87 - 19/04/2007 14:15
Avatar van edwin87 Nieuw lid Op dit moment heb ik dit:
  1. $query = mysql_query(" SELECT n_cat_id, COUNT(n_id) AS aantal
  2. FROM nieuws_cat
  3. LEFT JOIN nieuws
  4. ON c_id = n_cat_id
  5. GROUP BY c_id, n_cat_id
  6. ");


Dit werkt wel goed alleen geeft hij meerdere resultaten weer.

Algemeen 4
Test 4
Overige 4
Algemeen 0
Test 0
Overige 0
Algemeen 1
Test 1
Overige 1

Terwijl hij dit moet weergeven:
Algemeen 4
Test 0
Overige 1
Offline BaddyZ - 19/04/2007 14:32 (laatste wijziging 19/04/2007 14:39)
Avatar van BaddyZ Nieuw lid probeer is COUNT(*).
Is jouwn nieuws_cat tabel de kind tabel van nieuws? En is daarbij dus n_cat_id jouwn primaire sleutel? Zoja verander dan de kolomnaam van de verwijzende sleutel(cat_id) even in n_cat_id, daarna doe je dit

FROM nieuws_cat AS NC LEFT OUTER JOIN nieuws AS N ON NC.n_cat_id = N.cat_id
Offline ikkedikke - 19/04/2007 14:51
Avatar van ikkedikke PHP expert Heb je mijn oplossing al geprobeerd? Ik heb het zelf op een andere tabel getest en daar deed die het!
Offline edwin87 - 19/04/2007 15:05
Avatar van edwin87 Nieuw lid Ik heb jouw optie geprobeerd ikkedikke maar krijg eigenlijk steeds fouten.
Nu zal ik hier wel wat verkeerds doen.
SELECT `n_id`,
(
SELECT COUNT(1) A
FROM `nieuws`
WHERE `nieuws`.`n_cat_id` = `nieuws_cat`.`c_id`
) AS aantal
FROM `nieuws_cat`

Deze bedoelde je toch?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.205s