Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] grupowanie wyników
webspy
post
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 9
Dołączył: 3.03.2008

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


Witam,

Czy istenieje możliwość pogrupowania wyników z tabeli w taki sposób, że jeśli jest więcej takich samych to pokazuje drugi wynik a nie pierwszy czy ostatni?

Tabela:

Nazwa------------data--------------numer
krzysztof------2012-12-11-----------7
Adam------------2012-12-10------------7
Adam------------2012-10-10------------7
Adam------------2012-5-10------------4


group by numer numer ASC

Czy dam ASC czy DESC to i tak pokazuje wynik z brzegu albo pierwszy albo ostatni jak wyciągnąć wynik 2 od góry?

Na początku robiłem dwa osobne zapytania które grupowały a potem szukały drugiego wyniku przez LIMIT 1,1 lecz to nie sprawdza się bo potrzebuję wyświetlić kilka wyników w pętli a to moje pierwsze działało przy jednym wyniku.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Zapytanie masz do dupy.
NIE WOLNO dawać * w połączeniu z GROUP BY. Zwłaszcza, że nie grupujesz po polu unikalnym
Go to the top of the page
+Quote Post
webspy
post
Post #3





Grupa: Zarejestrowani
Postów: 186
Pomógł: 9
Dołączył: 3.03.2008

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


Cytat(mmmmmmm @ 19.12.2012, 12:38:18 ) *
Zapytanie masz do dupy.
NIE WOLNO dawać * w połączeniu z GROUP BY. Zwłaszcza, że nie grupujesz po polu unikalnym



To nawet jak nie dam tego * to jak zrobić aby rozwiązać mój problem?

Grupowanie działa i wyświetla prawidłowo tylko chce wyciągnąć jak pisałem wyżej 2 wynik z grupy.

Jak mam 30 takich samych wyników to grupuje do jednego i wyświetla pierwszy lub ostatni wiersz z grupy.


Rozwiązałem ten problem i działa jak chce tylko jako w 2 zapytaniach i z wykorzystaniem pętli.

Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Cytat(webspy @ 19.12.2012, 12:46:08 ) *
Jak mam 30 takich samych wyników to grupuje do jednego i wyświetla pierwszy lub ostatni wiersz z grupy.

Przypadek...
Cytat za manualem:
Cytat
12.11.3. GROUP BY and HAVING with Hidden Fields
MySQL extends the use of GROUP BY so that you can use non-aggregated columns or calculations in the SELECT list that do not appear in the GROUP BY clause. You can use this feature to get better performance by avoiding unnecessary column sorting and grouping. For example, you do not need to group on customer.name in the following query:

SELECT order.custid, customer.name, MAX(payments)
FROM order,customer
WHERE order.custid = customer.custid
GROUP BY order.custid;

In standard SQL, you would have to add customer.name to the GROUP BY clause. In MySQL, the name is redundant.

Do not use this feature if the columns you omit from the GROUP BY part are not constant in the group. The server is free to return any value from the group, so the results are indeterminate unless all values are the same.

A similar MySQL extension applies to the HAVING clause. The SQL standard does not allow the HAVING clause to name any column that is not found in the GROUP BY clause if it is not enclosed in an aggregate function. MySQL allows the use of such columns to simplify calculations. This extension assumes that the non-grouped columns will have the same group-wise values. Otherwise, the result is indeterminate.

Popraw zapytanie, aby było prawidłowe, to ci potem pomogę.
Go to the top of the page
+Quote Post
webspy
post
Post #5





Grupa: Zarejestrowani
Postów: 186
Pomógł: 9
Dołączył: 3.03.2008

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


Cytat(mmmmmmm @ 19.12.2012, 12:50:32 ) *
Przypadek...
Cytat za manualem:

Popraw zapytanie, aby było prawidłowe, to ci potem pomogę.



OK, posiedzę nad tym (IMG:style_emoticons/default/smile.gif)

Pierwsze proste zapytanie które grupuje pole numer

  1. SELECT numer FROM tabela GROUP BY numer



Zapytanie z manuala:

  1. SELECT tabela.numer, tabela.imie, MAX(numer) FROM tabela WHERE tabela.numer = tabela.numer GROUP BY tabela.numer


Działa, tylko, że jak to ma się do tego fragmentu "SELECT order.custid, customer.name" to są dwie osobne tabele? jak to interpretować?


I co dalej z tym zrobić, rozumiem, że te MAX po coś tu jest i trzeba go gdzieś wykorzystać dalej.





Będę potrzebował jeszcze HAVING?
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 03:56