Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie: raz działa a raz nie
Forum PHP.pl > Forum > Bazy danych > MySQL
camillos
Witam, to mój pierwszy post tutaj, choć już od dawna tu zaglądam i sporo się nauczyłem :-)
Jestem początkujący w bazach, więc prosze o wyrozumiałość, właśnie przerabiam skrypt z działającego na plikach na posługujący się bazą. Zetknąłem się z dziwnym problemem, otóż poniższe zapytanie wyświetla wynik zgodny z oczekiwaniami na moim lokalnym komputerze, natomiast po umieszczeniu na serwerze - wywala błąd, a gdy go wpisać w phpAdmina na tym serwerze zwraca błąd
Kod
#1111 - Invalid use of group function

Oto feralne zapytanie.
  1. SELECT `ip`, COUNT(`id`) FROM tablica GROUP BY `ip` ORDER BY COUNT(`id`) DESC

Zgaduję, że to pewnie różnica w wersji mysql (na serwerze jest 4.0.22-standard-log) - czy ktoś mógłby poradzić, jak przerobić to zapytanie, aby zadziałało?
Oczywiści `id` to klucz, `ip` to pole któremu chcę zliczyć ilośc rekordów od największej a tablica to tablica.

Chcę,aby nie tylko wypisało ile rekordów przypada na każde `ip` ale i uporządkowało wyniki od największych.
kwiateusz
a dlaczego w order by używasz count? o ile mi wiadomo to grupuje sie po polu bazy, a nie po jakiejś liczbie...
camillos
Nie ma takiego pola - chodzi mi o uporządkowanie według wyników grupowania. gdy wywalę ORDER BY dostaję

ip1 -3
ip2 -1
ip4 - 0
ip5 -2
a chcę dostać

ip1 -3
ip5 -2
ip2 -1
ip4-0
jak piszę, na domowym kompie wszystko działa idealnie.
kwiateusz
a próbowałeś wywalić count tj.
  1. SELECT `ip`, COUNT(`id`) FROM tablica GROUP BY `ip` ORDER BY `id` DESC
camillos
Niestety, nic to nie daje :-(
Najbardziej zależy mi na tym, aby wyłowić `ip` z liczbą rekordów większą niż 1 (takich jest mniejszość), może dałoby się to z jakimś innym warunkiem, na razie próbowałem where count(`id`)>1, ale nie działa.


Ok. już wiem, gdzieś znalazłem rozwiązanie (choć może nie do końca je rozumiem :-) )
  1. SELECT `ip` , COUNT( `id` ) AS Num
  2. FROM tablica GROUP BY `ip`
  3. ORDER BY Num DESC
Indeo
Wszystko jest dobrze. Jesli uzywasz wyrazenia powinieneś nadać nowym zmiennym nazwy (aliasy). Jak zauważysz w klauzuli WHERE wolno używać tylko nazw istniejących pól w tabeli lub definicji wyrażenia (np. count(ip) ) natomiast w przypadku klauzuli GROUP i HAVING używa się aliasów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.