login  Naam:   Wachtwoord: 
Registreer je!
 Forum

group by + having (Opgelost)

Offline Martijn - 27/03/2008 19:50 (laatste wijziging 27/03/2008 19:58)
Avatar van MartijnCrew PHP ik ben nieuw met GROUP BY, dus t gaat nog wat roestig

Ik wil graag dat ie per plaats (baai) selecteerd hoeveel er online zijn
dat doe ik zo:

  1. $sBaaiO=mysql_query("SELECT baai,lastactive,COUNT(lastactive) FROM members GROUP BY baai HAVING lastactive > ".$dertigterug) or die(mysql_error());
  2. //$dertigturg= time()-60*30
  3.  
  4. while($fBaaiO=mysql_fetch_array($sBaaiO)){
  5. echo $fBaaiO[0]."-".$fBaaiO[2]."<br>";
  6. }

alleen dit geeft weer:
baai-online:
2-2
3-2
dat zijn er 4 online en dr zijn dr maar 3. Ik weet omdat ik de in DB kan dat er in 3 maar 1 iemand is

wat doe ik fout? 
edit: hmm, ik geloof dat ie de baai selecteerd als er iemand online is

6 antwoorden

Gesponsorde links
Offline MothZone - 27/03/2008 20:01 (laatste wijziging 27/03/2008 20:02)
Avatar van MothZone PHP ver gevorderde Probeer dit eens:

  1. $sBaaiO=mysql_query(
  2.  
  3. "SELECT baai,lastactive,COUNT(lastactive)
  4. FROM members
  5. GROUP BY baai, lastactive
  6. WHERE lastactive > ".$dertigterug
  7.  
  8. ) or die(mysql_error());
  9. //$dertigturg= time()-60*30
  10.  
  11. while($fBaaiO=mysql_fetch_array($sBaaiO)){
  12. echo $fBaaiO[0]."-".$fBaaiO[2]."<br>";
  13. }


In je GROUP BY moeten altijd alle velden staan waarop geen aggregatiefunctie wordt uitgevoerd (dingen zoals count(), min(), max(),...).
Dus ook lastactive moet daarin.
Daarnaast heeft je HAVING dezelfde functie als de WHERE, alleen wordt deze enkel gebruikt voor vergelijkingen met dingen zoals count() in.
De rest moet je in de WHERE plaatsen.
Offline Martijn - 27/03/2008 20:05
Avatar van Martijn Crew PHP You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE lastactive > 1206641781'

ik had al where geprobeerd, maar toen kreeg ik ook dit, dus ik dacht dat t HAVING moest zijn
Offline MothZone - 27/03/2008 20:07 (laatste wijziging 27/03/2008 20:07)
Avatar van MothZone PHP ver gevorderde
  1. $sBaaiO=mysql_query(
  2.  
  3. "SELECT baai,lastactive,COUNT(lastactive)
  4. FROM members
  5. WHERE lastactive > ".$dertigterug."
  6. GROUP BY baai, lastactive"
  7.  
  8. ) or die(mysql_error());
  9. //$dertigturg= time()-60*30
  10.  
  11. while($fBaaiO=mysql_fetch_array($sBaaiO)){
  12. echo $fBaaiO[0]."-".$fBaaiO[2]."<br>";
  13. }


even 2 regels omgedraaid (where en group by), was ff die volgorde vergeten
Offline Martijn - 27/03/2008 20:09
Avatar van Martijn Crew PHP oke, geen error meer, maar nou nog niet goed. Ik heb iedereen in baai 1 gezet via DB, en er zijn 2 mensen online, dus dat zou moetn reulteren in
1-2
maar er is
1-1
1-1
1-1
Offline MothZone - 27/03/2008 20:15 (laatste wijziging 27/03/2008 20:16)
Avatar van MothZone PHP ver gevorderde Zeker dat je de code geupdate hebt?
Heb hier ff een tabel aangemaakt om te testen en hier werkt het

Probeer anders eens door de lastactive uit je select en group by te halen, aangezien je die toch niet gebruikt (ookal zie ik niet hoe dat zou kunnen helpen)

of misschien ligt het aan $dertigterug?
Offline Martijn - 27/03/2008 20:20
Avatar van Martijn Crew PHP de lastactive uit selectie halen was het ! bedenkt 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.202s