![]() |
![]() |
![]()
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:
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) |
|
|
![]() |
![]()
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:
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:
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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 12:01 |