Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie i kolejność wyników
johnson
post
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 2
Dołączył: 3.12.2004

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


Są takie oto rekordy (tabela uzytkownicy):

Kod
+---------+-----------+-------------+
|    id   | zespol_id |    imie     |
+---------+-----------+-------------+
|    1    |     3     |  Karolina   |
|    2    |     3     |  Mateusz    |
|    3    |     3     |  Magda      |
|    4    |     3     |  Andrzej    |
+---------+-----------+-------------+


Teraz grupując zapytaniem:
  1. SELECT count(*) AS liczba, imie, id
  2. FROM uzytkownicy GROUP BY zespol_id


otrzymujemy liczbę użytkowników w danym zespole oraz imię jednego użytkownika w tym teamie oraz jego id, problem polega jednak na tym, że w żaden sposób nie można wpłynąć na to, które imię się wyświetli

Czy można w jakiś sposób wpłynąć na to, które imię się wyświetli (np. posortować alfabetycznie i zwróci się pierwsze; dobrze by też było jakby zwracane było właściwe dla tego użytkownika id)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Cytat(johnson @ 2005-05-22 22:05:36)
Spróbuje nieco bardziej zobrazować o co mi chodzi.

id | domena | url | rate |
1 | www.php.pl | www.php.pl/strona2 | 90
2 | www.php.pl | www.php.pl/strona1 | 30
3 | www.php.pl | www.php.pl/strona4 | 70
4 | www.php.pl | www.php.pl/strona3 |  100
5 | forum.php.pl | forum.php.pl/strona3 | 20
6 | forum.php.pl | forum.php.pl/strona2 | 50
7 | forum.php.pl | forum.php.pl/strona1 | 60

Jakie pytanie należy zadać aby otrzymać 2 rekordy:
4 | www.php.pl | www.php.pl/strona3 |  100
7 | forum.php.pl | forum.php.pl/strona1 | 60

Da rade, aczkolwiek juz sobie nie uzyjesz funkcji grupujacych, bo rozwiazanie nie opiera sie na grupowaniu (widzialem gdzies w necie rozwiazanie tego z grupowaniem).
A wiec:
  1. SELECT t1.*
  2. FROM tabela t1
  3. LEFT JOIN tabela t2 ON (t1.domena = t2.domena AND t1.rate < t2.rate)
  4. WHERE t2.id IS NULL

Nie sprawdzilem, bo nie mam danych, ale chyba powinno byc dobrze. Taki calkiem przydatny trick.. tylko koniecznie trzeba zalozyc indeks na pole, po ktorym "grupujemy".



---edit:
Powalczylem chwile i doszedlem jak uruchomic tu jeszcze grupowanie...
  1. SELECT t1.*, COUNT(t3.article) ile, MIN(t3.price) min FROM shop t1
  2. LEFT JOIN shop t2 ON (t1.article = t2.article AND t1.price < t2.price)
  3. INNER JOIN shop t3 ON (t1.article = t3.article)
  4. WHERE t2.article IS NULL
  5. GROUP BY t3.article

To jest na innych danych, bo akurat taka tabele mialem pod reka do testow, ale sytuacja jest analogiczna do tej powyzszej.
Tabela i dane:
Kod
article | dealer | price
0001       A       3.45
0001       B       3.99
0002       A       10.99
0003       B       1.45
0003       C       1.69
0003       D       1.25
0004       D       19.95

Jak widac wyciagnelismy wiersz z najwyzsza cena dla danego artykulu, jednoczesnie umozliwiajac sobie wyciagniecie ilosci wierszy w tej grupie artykulow oraz najmniejszej ceny.
Wynik:
Kod
article dealer  price  ile      min
0001    B       3.99    2       3.45
0002    A       10.99   1       10.99
0003    C       1.69    3       1.25
0004    D       19.95   1       19.95


Ten post edytował FiDO 23.05.2005, 16:48:40
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: 28.12.2025 - 03:30