[mysql] count probleem

Pagina: 1
Acties:

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
hallo, ik heb deze query:

SELECT a.a_id, a.p_d, a.k_id, a.merk, a.type, a.kmstand, a.prijs, a.bouwjaar FROM auto a , auto_opties_koppel k WHERE k.a_id = a.a_id AND k.o_id in (1,2) GROUP BY a.a_id HAVING COUNT(k.o_id) = 2

hier komen 4 resultaten in naar voren

nu moet ik van te voren weten hoeveel resultaten ik krijg, om de site over verschillende pagina's te verdelen (met limit) en om totaal te tellen zonder een loop do ik dus dit:

SELECT count(*D as aantal FROM auto a , auto_opties_koppel k WHERE k.a_id = a.a_id AND k.o_id in (1,2) GROUP BY a.a_id HAVING COUNT(k.o_id) = 2

en dan krijg ik 2 resultaten, echt vaag, terwijl het er toch gewoon zoals bovenstaand moeten zijn.

maak ik van die 'in-constructie dit: in (1) en dan later dus 'having count(k.o_id) = 1 dan krijg ik met count 1 terug, terwijl ik dan 5 resultaten had moeten krijgen, waarom count ie hier niet goed? of waarom wel goed en wat doe ik dan verkeerd?

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Ik ben geen kei in SQL, maar het komt er op neer dat je rows met de waarde van COUNT( * ) gaat groeperen. Dat levert dus een ander aantal groepen op dan het groeperen van de hele lijst van velden.


(slechte) Oplossing. Gebruik geen LIMIT, en tel het aantal rijen met mysql_num_rows() (ofzo), en laat de eerste zoveel zien d.m.v. een hard beeindigde loop.

|_____vakje______|


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

count( * ) hoeft niet per definitie hetzelfde resultaat te geven als count(column_name)


zie (bijvoorbeeld)Group By functions:
COUNT( * ) is somewhat different in that it returns a count of the number of rows retrieved, whether or not they contain NULL values.
Je hebt dus blijkbaar een aantal rows waar k.o_id "NULL" is :?

[edit]
zie ook [topic=369331] waar ik dezelfde vraag (m.b.t. 1e deel) stel
De oplossing kwam neer op (in pseudo php):
PHP:
1
2
3
4
5
6
7
8
9
10
<?
$FirstLine=1;
while ( $result=mysql_fetch_row(...) ) {
   if ( $FirstLine ) {
      // haal de count op
      $FirstLine=0;
   }
   // doe de rest
}
?>

of moet je de waarde nog eerder hebben ?

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
ehmm ik had een foutje gemaakt

site is nog in ontwikkeling, en vanmiddag hadden we de db geleegd, nou ja dat dachten we dus, ik was de koppeltabel vergeten, dus ja dan klopt er niet meer veel van als je nieuwe dingen aanmaakt

toch thanks

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

:o |:(

No problem :P

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
kut.... toch nog het zelfde probleem :(

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

al het verschil gecontroleerd tussen count( * ) en count ( column_name ) ?

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
ja, heb ook count(a.a_id) geprobeerd, zelfde als ( * )

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
ehmm ben er nog steeds niet uit... :(

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
oh ja, en er zijn nergens NULL values!!!

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
zo slotje, ik weet het al

zonder group by krijg je bv 3 terug

en met group by krijg ik dit terug:

1
1
1

dus 3 rijen met 1 (hoop dat het tellen dan nog snel is

dus wat doe ik nu:
kijk of in de query 'group by' voorkomt, zo ja, doe ik mysql_num_rows en anders vraag ik gewoon het count-result op!!
Pagina: 1