[MySQL] COUNT(*) direkt in WHERE mit einbeziehen

27o8

abgemeldet
2 Mai 2006
9.028
933
Ich steh grad volla uf dem Schlauch und versteh es net 8O
Code:
SELECT 
          `login_ip`,COUNT(*) AS `anzahl` 
FROM 
          `vms_kontodaten` 
WHERE 
         `anzahl` > 1 
GROUP BY
         `login_ip` 
ORDER BY 
         `anzahl` DESC
Wenn ich das ausfführe kommt immmer
Unknown column 'anzahl' in 'where clause'


Was es bedeutet weis ich... aber wieso kommt es? Ich habe doch das anzahl vorher mit COUNT(*) definiert, ich bin mir ziemlich sicher das ich es so schonmal gemacht hatte und es funktionierte :-?
 
Felder, die du vorne mit AS umbenennst, sind hinten bei WHERE und ORDER trotzdem unbekannt. Keine Ahnung ob eine/welche MySQL-Version das unterstützt, aber wenn du
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B]
  `login_ip`, [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `anzahl`
[B][COLOR=#9932cc]FROM[/COLOR][/B]
 `vms_kontodaten`
[B][COLOR=#9932cc]WHERE[/COLOR][/B]
  [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR] > 1
[B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B]
  `login_ip`
[B][COLOR=#9932cc]ORDER[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B]
  [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]DESC[/COLOR][/B][/FONT]
machst, müsste es gehen.

edit:
Ich hab einfach search&replace gemacht, aber wo ich das so grade mit dem COUNT(*) im WHERE und ORDER BY seh.... probier mal, obs so geht. Sicher bin ich mir grade nimmer :biggrin:
 
Soweit ich mich erinnern kann an die zeit, als ich auch einmal so etwas vorhabe, kann man in der WHERE-Klausel keine Funktion drin haben.

Sollte also tHs Code nicht funktionieren, probier mal statt dem WHERE ein HAVING zu verwenden. Von der Funktion her ist das meines Wissens und Erinnerungsvermögens her das gleiche, erlaubt aber das Anwenden von Funktionen.
 
Also bei theHackers Vorschlag krieg ich immer ein
"Invalid use of group function" zurück ;)


Code:
SELECT 
          `login_ip`, COUNT(*) AS `anzahl` 
FROM  
          `vms_kontodaten` 
GROUP BY 
           `login_ip` 
HAVING 
           COUNT(*) > 1 
ORDER BY 
           COUNT(*) DESC
Das funktioniert 8)

Gruß
Gremlin
 
Ich habe auch eine VMS DB auf meinem Server und habe es direkt mal ausprobiert ;)
Leider gibt es wohl noch ein Problem mit dem Gruppieren.

Code:
SELECT `login_ip` , COUNT( * ) AS `anzahl`
FROM `vms_kontodaten`
WHERE COUNT( * ) >1
GROUP BY `login_ip`
ORDER BY COUNT( * ) DESC
LIMIT 0 , 30 

#1111 - Invalid use of group function

Ich gehe mal stark davon aus, dass es das gleiche Problem bei gremlin gibt ;)

EDIT: Ah mist, zu spät :p aber man habe ich lange getestet :p
 
da das Where vor dem Group by ausgeführt wird ergibt das keinen sinn ;)
Ihr zählt ALLE zeilen und wolltest das "verknüpfen" mit der login_ip?
Das bedeutet ihr verknüpft eine Zeilen basierte Ausgabe mit einer Ausgabe.
Das Count muss also auf die fertige Gruppierung angewendet, um herauszufinden wie viele Ergebniszeilen in der Gruppe sind, so wie gremlin es formuliert hat.
 
sogar bei MySQL-Client-Version: 5.0.32 welche ich auch nutze, bei mir gehts bei ihm nicht. Woran kann denn das liegen? 8O

sntaktisch korrekt, alle ausgelesen spalten gehören zu der gruppierung, hmm, liegt es vllt am order by ? sollte zwar net, aber mit having ohne group by denke ich sollte es doch funzen, vllt hat er da ja irgendwelche probleme beim verstehen
 
Ohne ORDER BY funktioniert es nun auch bei den anderen :) find ich nur komisch das es sogar bei der gleichen MySQL Version Unterschiede gibt 8O danke dir.
 
[..]find ich nur komisch das es sogar bei der gleichen MySQL Version Unterschiede gibt[..]

Ich denke mal du hast es bei dir lokal auf einem Windows PC getestet?
Kann ja sein, dass es Unterschiede von MySQL auf Windows und Linux Rechnern gibt ;) Wäre der einzige, mir erklärliche Grund, warum das auf einem geht, auf dem anderen nicht.
 
Ohne ORDER BY funktioniert es nun auch bei den anderen :) find ich nur komisch das es sogar bei der gleichen MySQL Version Unterschiede gibt 8O danke dir.
Tja, Murphys Law^^
In wieweit denn genau die gleichen Versionen?

Kann ja sein, dass es Unterschiede von MySQL auf Windows und Linux Rechnern gibt ;) Wäre der einzige, mir erklärliche Grund, warum das auf einem geht, auf dem anderen nicht.
Sollte eigentlich keine Unterschiede geben. Und erklären kannst du bei Datenbanken oft vieles nicht, gerade wenn es an den Query Optimizer geht der nen Query total verschlimmbessert
 
Hi,
habe es unter Linux getestet :) ich gehe mal davon aus das der Server von demjenigen bei dem es nicht lief auch linux ist (ist ja schon fast Standard ;))

In wieweit denn genau die gleichen Versionen?
verwendete MySQL Version in beiden Fällen: 5.0.32