error in php door mysql (Invalid use of group function)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 19:31:00
Quote Anchor link
Hallo, ik zit met een probleempje...

Ik krijg de error: Invalid use of group function
Dit is een MySQL error... Waar ligt het dan aan? Ik heb al zitten zoeken, maar krijg het niet opgelost. (is dit de juiste categorie? Het is ook deels php)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

    $result
= mysql_query("SELECT COUNT(name),`rank`,`ref` FROM login WHERE `rank`>='4' and `ref`!='' GROUP BY `ref` ORDER BY COUNT(name) DESC LIMIT 0,10") or die(mysql_error());
    while($row = mysql_fetch_array( $result )) {
    
    echo"<tr>
    <td width=\"150\" class=\"cell\"><a href=\"view_profile.php?name="
.htmlentities($row['ref'])."\" onFocus=\"if(this.blur)this.blur()\">".htmlentities($row['ref'])."</td>
    <td width=\"150\" class=\"cell\">"
.htmlentities($row['COUNT(name)'])."</td>
    <td width=\"150\" class=\"cell\">$ "
.htmlentities(number_format($row['COUNT(name)'] * 10000)).",-</td>
  </tr>"
;
    
 }
// while

?>
 
PHP hulp

PHP hulp

20/04/2024 02:28:07
 
PHP erik

PHP erik

22/10/2008 19:33:00
Quote Anchor link
Wat wil je bereiken? Het is geheel logisch dat je niet kunt groeperen op rank als je ook ref selecteert en count op name. Is een volledig onlogische query.

Voor de luie mensen onder ons, dit is de query waar het om gaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
 COUNT(name),
 `rank`,
 `ref`
FROM
 login
WHERE
 `rank`>='4'
and
 `ref`!=''
GROUP BY
 `ref`
ORDER BY
 COUNT(name) DESC
LIMIT 0,10
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 19:36:00
Quote Anchor link
hoe zou het dan wel juist kunnen gaan?

Ik moet die drie selecteren.
+ de rank moet groter zijn dan 4
+ ref mag niet gelijk zijn aan '' (niets)
+ het moet gegroepeerd worden op ref
+ gerangschikt op count(name) (desc) met limit 0,10

Hoe moet het wel??

Iemand die het kan uitleggen?
 
PHP erik

PHP erik

22/10/2008 19:39:00
Quote Anchor link
Kun je je datamodel geven? En snap je wel hoe GROUP BY werkt en COUNT? Want de dingen die je nu zegt zijn nog steeds niet erg logisch.
 
Noppes

Noppes

22/10/2008 19:42:00
Quote Anchor link
De GROUP BY moet verplicht alle velden bevatten welke niet gaan om de aggregate function

In jou geval
GROUP BY rank,ref

Voor de rest zal ik de count een alias geven, is prettiger bij het opvragen/uitlezen

En backtick -> ` horen niet thuis in SQL dus weg er mee
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 19:42:00
Quote Anchor link
het script heb ik niet volledig zelf geschreven...

Het zou zo moeten zijn dat er een lijst wordt weergegeven met de names die het meeste refs hebben (gerangschikt: desc).

Op mijn vorige server draaide ik dit ook EN werkte het...
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 19:53:00
Quote Anchor link
sorry voor dubbelpost, ben niet echt gewend aan forums/fora...
@Noppes:

Ik heb group by rank, ref gezet (rank er dus bij) en die ` tekens weggedaan.
Nog steeds krijg ik die error...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

    $result
= mysql_query("SELECT COUNT(name),rank,ref FROM login WHERE rank>='4' and ref!='' GROUP BY rank,ref ORDER BY COUNT(name) DESC LIMIT 0,10") or die(mysql_error());
    while($row = mysql_fetch_array( $result )) {
    
    echo"<tr>
    <td width=\"150\" class=\"cell\"><a href=\"view_profile.php?name="
.htmlentities($row['ref'])."\" onFocus=\"if(this.blur)this.blur()\">".htmlentities($row['ref'])."</td>
    <td width=\"150\" class=\"cell\">"
.htmlentities($row['COUNT(name)'])."</td>
    <td width=\"150\" class=\"cell\">$ "
.htmlentities(number_format($row['COUNT(name)'] * 10000)).",-</td>
  </tr>"
;
    
 }
// while

?>


Is er niemand die me kan helpen???
Gewijzigd op 01/01/1970 01:00:00 door Ruben Vanhoeyveld
 
Noppes

Noppes

22/10/2008 20:12:00
Quote Anchor link
MM zeker weer een grapje van MySql rename het veld ref eens naar iets anders en probeer het dan nog eens
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 20:14:00
Quote Anchor link
hmm zal eens proberen...
 
Jan Koehoorn

Jan Koehoorn

22/10/2008 20:15:00
Quote Anchor link
Waarom niet gewoon:

SELECT COUNT(ref) AS refs, naam
FROM login
GROUP BY naam
ORDER BY refs DESC
LIMIT 10
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 20:16:00
Quote Anchor link
omdat de rank >= 4 moet zijn...
Gewijzigd op 01/01/1970 01:00:00 door Ruben Vanhoeyveld
 
Henk PHP

Henk PHP

22/10/2008 20:19:00
Quote Anchor link
Als de rank groter moet zijn dan 4 zet je dat gewoon in de WHERE, dat hoeft je niet te selecteren.
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 20:20:00
Quote Anchor link
is dat zo? :o
 
Jan Koehoorn

Jan Koehoorn

22/10/2008 20:20:00
Quote Anchor link
Pfff!

SELECT COUNT(ref) AS refs, naam
FROM login
WHERE rank >= 4
GROUP BY naam
ORDER BY refs DESC
LIMIT 10
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 20:25:00
Quote Anchor link
sorry hoor pfff

Ik heb nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$result
= mysql_query("SELECT COUNT(ref) AS refs, name FROM login GROUP BY name WHERE rank >= 4 ORDER BY refs DESC LIMIT 10") or die(mysql_error());
?>


maar krijg de error:

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 rank >= 4 ORDER BY refs DESC LIMIT 10' at line 1
 
Joren de Wit

Joren de Wit

22/10/2008 20:26:00
Quote Anchor link
Ruben Vanhoeyveld schreef op 22.10.2008 20:20:
is dat zo? :o
SQL Beginnershandleiding

Het is misschien niet zo'n heel gek idee om deze handleiding eens door te lezen. De vragen die je stelt behoren echt tot de basiskennis...

ps. Over de fout hierboven: WHERE hoort voor GROUP BY.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
- -

- -

22/10/2008 20:28:00
Quote Anchor link
Je group by moet op het einde, na je where.

Edit: Blanche was me voor..
Gewijzigd op 01/01/1970 01:00:00 door - -
 
Jan Koehoorn

Jan Koehoorn

22/10/2008 20:29:00
Quote Anchor link
Query-voorbeeld is aangepast ;-)
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

22/10/2008 20:31:00
Quote Anchor link
ERROR: 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 'GROUP BY name' at line 1

Ik begin stilaan te denken dat mijn versie van MySQL een oudere is... Op mijn vorige server ging het wel met een andere database...
 
Joren de Wit

Joren de Wit

22/10/2008 20:32:00
Quote Anchor link
Hoe ziet je query er nu uit dan? De juiste volgorde is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  ...
FROM
  ...
WHERE
  ...
GROUP BY
  ...
ORDER BY
  ...
LIMIT
  ...

ps. Maar lees nu die handleiding die ik gaf eens even. Daar had je dit allemaal ook uit kunnen halen...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Jan Koehoorn

Jan Koehoorn

22/10/2008 20:32:00
Quote Anchor link
Het zou handig zijn als je behalve de error ook even je query post.
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.