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
amwoan
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.05.2005

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


Cytat(johnson @ 2005-05-22 19:15:54)
Cytat(amwoan @ 2005-05-22 16:40:29)
a co jeśli w danej grupie jest więcej ludzi o takim samym wieku?

To już nieważne...

To jest ważne, z punktu widzenia spójności danych. To, że w Twoim konkretnym przypadku może akurat nie jest, nie ma nic wspólnego ze standardami i tym, że ta "logika" musi się sprawdzać w każdej sytuacji.

Poza tym czegoś tu nie rozumiem chyba... Jeśli musisz dzielić wyniki (a więc jakiś LIMIT, jak mniemam) musisz znać ilość rekordów przed wykonaniem zapytania i potem dopiero pobierać dane porcjami (czyli musisz dwa razy wywołać SELECTa, raz z samym COUNT, drugi raz już z wszystkimi potrzebnymi danymi), natomiast, jeśli pobierasz w szystkie rekordy spełniające jakieś warunki, użyj po prostu mysql_num_rows (skoro wspomniałeś, iż jest to aplikacja php). Nie potrafię nic powiedzieć szczegółowo, bo też tak naprawdę nie wiem jakie dokładnie są wymogi dla Twojej aplikacji. Nie mniej istnieje jeszcze jedna "ciekawostka", która może Ci w czymś pomoże. Od MySQL w wersji 4.0 istnieje coś takiego jak SQL_CALC_FOUND_ROWS, które używa się przykładowo w następujący sposób:
  1. SELECT SQL_CALC_FOUND_ROWS *
  2. FROM tabela WHERE jakies_pole > 50 LIMIT 10 ;

Taka opcja powoduje, że obliczana jest całkowita liczba wierszy, która byłaby zwrócona w zapytaniu, gdyby nie ograniczający LIMIT. Po wykonaniu takiego zapytania zwracane są normalnie rekordy (odpowiednio limitowana ilość), natomiast, aby dostać całkowitą liczbę wszystkich spełniających warunek należy wykonać kolejne zapytanie do bazy:
  1. SELECT FOUND_ROWS();

To chyba tyle ode mnie, mam nadzieję, że to co napisałem jest w miarę zrozumiałe i w jakiś sposób pomoże. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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: 17.10.2025 - 12:01