![]() |
![]() |
![]()
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%) ![]() ![]() |
Przykładowe rozwiązanie w php:
Najpierw jest tworzona tymczasowa tabela z domeną i największym ratem dla niej. Później wykonywany jest właściwy SELECT, który wybiera pola z tabeli domeny (tak ją sobie nazwałem) połączonej za pomocą INNER JOINa z tymczasową tabelą tmptbl odpowiednio na polach `domena`<->`domena` oraz `rate`<->`r`. Musisz tylko pamiętać, że to zapytanie wybierze wszystkie strony z danej domeny, które posiadają rate równy największemu. Szczerze mówiąc, nie wiem w tej chwili czy istnieje prosty sposób wyfiltrowania w samym SQLu tylko pojedynczych wpisów dla danej domeny, ale to już można prosto załatwić w samym php. To jest rozwiązanie dla MySQL 4.0 i niższej, od wersji 4.1 można używać zagnieżdżonych SELECTów i wtedy nie ma potrzeby tworzenia tymczasowej tabeli. Tak to się właśnie robi. Tabela tymczasowa istnieje tylko na czas konkretnego połączenia z bazą (czyli czas działania skryptu) oraz jest widoczna tylko dla danego połączenia (nie ma konfliktu nazw tabeli tymczasowej, nawet w przypadku kilku równoległych połączeń do bazy). Aha, jeszcze jeden wymóg, który tyczy się tylko wersji 4.0, to konieczność posiadania uprawnień do tworzenia tabel tymczasowych. Jeszcze raz też przestrzegam przed używaniem pól nie poddanych funkcji agregującej, bądź nie będących częścią GROUP BY, kiedy właśnie ta klauzula jest używana. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 11:54 |