[php/MySQL] Moedeloos van simpel count-probleem

Pagina: 1
Acties:

  • twi
  • Registratie: Februari 2000
  • Laatst online: 05-08 16:40
Ik ga jullie een grote voorzet geven om me gigantisch uit te lachen, maar so be it:

Ik heb vanmiddag geprobeerd een leuke query te maken, welke uiteindelijk niet werkte. Deel voor deel heb ik deze gestripped en zoals je kunt zien heb ik het ding compleet vereenvoudigd tot waar het probleem zit: het stelt eenvoudigweg niks meer voor.

En mijn probleem is dus dat ik geen probleem zie. Ik heb GoT afgezocht, de PHP & MySQL-documentatie gelezen en veel voorbeelden bekeken. Aangezien ik al het nodige heb gedaan met PHP voel ik me een ontzettende }:O dat ik geen fout zie. Mijn probleem:

Ik heb een fout in de query, wanneer ik op een willekeurige plaats COUNT( * ) toevoeg in m'n SELECT. Wanneer de COUNT ( * ) het enige is in m'n query, dan werkt 'ie prima en krijg ik het gewenste getal. Wanneer ik de COUNT( * ) uit de volgende query weglaat werkt deze ook uitstekend en krijg ik de gewenste titel. Met de database-connectie of de werking van COUNT( * ) zit alles dus snor. Maar waarom werkt het niet als ik deze beiden combineer? In diverse queries hier in GoT zie ik tot m'n grote frustratie overal COUNT( * )'s opduiken, maar om de één of andere vage reden werkt deze niet bij mij...Iemand die me een (on)geschreven regel m.b.t. het gebruik van COUNT( * ) in queries kan uitspellen?
PHP:
1
<?include('config.php');$query = "SELECT titel, COUNT(*) as aantal FROM nieuws WHERE id=1";$result = mysql_query($query,$connection) or die ("Waarom doet mijn lieve query het niet?");$info   = mysql_fetch_array($result);$aantal = $info["aantal"];$titel  = $info["titel"];echo "$titel / $aantal";?>

PS: De fout is trouwens gewoon de query-foutmelding die ik heb meegegeven: "Waarom doet mijn lieve query het niet?", welke speciaal voor dit topic gecensureerd is (hij was een aantal slagen erger door de frustratie).

PS2: config.php is gewoon de databaseconnectie :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:02

gorgi_19

Kruimeltjes zijn weer op :9

Mijn eerste idee is dat je nog de Group By moet gebruiken en eventueel de Having i.p.v. de Where. MAar ik zal het ff gaan uitzoeken.

Yep, ik was eerder en ik heb een vergelijkbaar voorbeeldje gevonden:
code:
1
2
3
4
SELECT     AnnouncementID, COUNT(Announcement) AS Expr1, Title
FROM       dbo.Announcements
GROUP BY AnnouncementID, Title
HAVING  (Title = '1')

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49

TheDane

1.618

je probeert precies 1 resultaat te koppelen aan een resultset waarin meer dan precies 1 (id = 1) resultaten voor kunnen komen. mag niet, ook al heb je in je database aangegeven dat ID unique moet zijn etc.

oplossing:
code:
1
select titel, count(*) from table where id = 1 group by titel;

(denk ik, weet niet precies wat voor resultaten je wil/verwacht)

argh,. gorgi was eerst :P

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:50

mulder

ik spuug op het trottoir

Je gaat het aantal nieuwsitems tellen. Die hebben allemaal 1 titel. Welke wil je dan terug als je Titel1 en Titel2 in je table zitten, en je ook nog een het totaal (2) wilt hebben? Eeuh, jij weet het, maar of mysql dat kan rijmen...

oogjes open, snaveltjes dicht


  • twi
  • Registratie: Februari 2000
  • Laatst online: 05-08 16:40
Hmmmm ik doe het inderdaad wat vreemd...Dit is slechts een voorbeeld. Die WHERE id=1 hoort niet in deze query thuis, uiteindelijk wil ik dus een lijstje van titels hebben, met ID-code:
code:
1
2
3
4
5
6
7
8
9
Titel    IDCode
------------------
Titel 1     12
Titel 2     17
Titel 3     21
Titel 4     36
Titel 5     55
------------------
Totaal 5 titels

Deze resultaten haal ik dus uit deze query, met een while-loopje erachteraan die alles keurig in een tabelletje zet. Naast deze resultaten wil ik in dezelfde query dus het cijfer van het totaal aantal titels hebben die uit deze query komen rollen. Dit is iets netter en handiger dan met mysql_num_rows vind ik. Ik ga even in de MySQL documentatie snuffelen, aangezien ik me vaag iets met DISTINCT herinner.

Nevermind, ik moet niet zo zeuren en gebruik gewoon mysql_num_rows. Mocht iemand nog een antwoord weten hier is dat mooi meegenomen.

In ieder geval bedankt voor jullie hulp en 't wegnemen van een hoop frustratie :P