Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie: raz działa a raz nie
camillos
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 26.06.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował camillos 30.06.2007, 18:55:54
Go to the top of the page
+Quote Post
kwiateusz
post
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




a dlaczego w order by używasz count? o ile mi wiadomo to grupuje sie po polu bazy, a nie po jakiejś liczbie...
Go to the top of the page
+Quote Post
camillos
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 26.06.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował camillos 30.06.2007, 19:17:00
Go to the top of the page
+Quote Post
kwiateusz
post
Post #4


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




a próbowałeś wywalić count tj.
  1. SELECT `ip`, COUNT(`id`) FROM tablica GROUP BY `ip` ORDER BY `id` DESC
Go to the top of the page
+Quote Post
camillos
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 26.06.2007

Ostrzeżenie: (0%)
-----


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


Ten post edytował camillos 30.06.2007, 21:33:54
Go to the top of the page
+Quote Post
Indeo
post
Post #6





Grupa: Zarejestrowani
Postów: 295
Pomógł: 7
Dołączył: 26.03.2004
Skąd: Opole

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:27