Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: bez limit i order by
Forum PHP.pl > Forum > Bazy danych > MySQL
bazyliszek83
Witam.

Problem jest następujący.

Załóżmy że mam tabele 'pracownicy' a w niej m.in. pole 'wynagrodzenie'.
Powiedzmy że chciałbym uzyskać np. 5 najlepiej zarabiających pracowników.

Sęk w tym żeby zrobić to nie używająć 'LIMIT' i 'ORDER BY'...

Ma ktoś jakiś pomysł?
Kihol
Jeśli chcesz uzyskać 5ciu najlepszych, to 'limit' na pewno musisz użyć. I dlaczego takie założenia? Najprostsza metoda:
  1. SELECT * FROM pracownicy ORDER BY wynagrodzenie DESC LIMIT 5


a inaczej? hmm.. myślę i nie mam pomysłu smile.gif

Ewentualnie możesz ściągnąć całą tabelę pracownicy do arraya (np w php) i w pętli wyciągnąć tych 5-ciu
bazyliszek83
Powiem tak, mialem kiedyś takie zadanko na rozmowie o prace i jak dotąd nie wiem jak to rozwiązać smile.gif Dodam tylko że była to poważna firma więc rozwiązanie musi istnieć.

Aha i chodzi tu o czyste zapytanko w SQL, bez PHP...smile.gif
AxZx
Cytat(bazyliszek83 @ 2.02.2009, 13:10:01 ) *
Powiem tak, mialem kiedyś takie zadanko na rozmowie o prace i jak dotąd nie wiem jak to rozwiązać smile.gif Dodam tylko że była to poważna firma więc rozwiązanie musi istnieć.

Aha i chodzi tu o czyste zapytanko w SQL, bez PHP... smile.gif


może nie chodzi o to, że ma być rozwiązanie takie jak w założeniu. może wystarczy odpowiednio uzasadnić, że się nie da:)
no chyba żeby kombinować ze zliczeniem, z pobieraniem tylko 5 wierszy, np. dodając zmienną albo coś takiego.
ale to wszystko jest raczej obejściem na około, a po co tak kombinować jak do tego jest LIMIT ?
Kihol
Ja bym odpowiedział, że nie zastanawiał bym się nad takim problemem, tylko użył bym zapytania powyżej, z dwóch powodów: jest optymalne i nie tracę czasu na inne rozwiązania, tworząc dalszą część aplikacji smile.gif
bazyliszek83
Cytat(Kihol @ 2.02.2009, 13:19:46 ) *
Ja bym odpowiedział, że nie zastanawiał bym się nad takim problemem, tylko użył bym zapytania powyżej, z dwóch powodów: jest optymalne i nie tracę czasu na inne rozwiązania, tworząc dalszą część aplikacji smile.gif


Skąd wiesz że jest optymalne skoro nie znasz innych rozwiązań?smile.gif
Sposób z LIMIT i ORDER BY jest jak najbardziej intuicyjny , ale czy na pewno jedyny?
zegarek84
5 wyników można posortować w samym php (choć i o sortowaniu nie było wzmianki tongue.gif), rozwiązanie nie jest jedyne z limit aczkolwiek i mi sie wydaje najoptymalniejsze i zbliżone do funkcji z excela max.k() (co też można obejść ale czegoś takiego jak formuły tablicowe chyba nie ma w zapytaniach sql tongue.gif ) - a takie rozwiązanie na szybko - na pewno nie optymalne ale jednak tongue.gif:
  1. SELECT id FROM wies WHERE id>=(SELECT max(id) FROM wies WHERE id<(SELECT max(id) FROM wies WHERE id<(SELECT max(id) FROM wies WHERE id<(SELECT max(id) FROM wies WHERE id<(SELECT max(id) FROM wies)))))


ps. coś gdzieś chyba widzialem wzmianki o agregacji funkcji w sql - z ciekawości poszukam więcej materjałów - może bedzie dało się uzyskać podobny efekt jak w excelu funkcje tablicowe przez zatwierdzenie crlt+shift+enter ^^
Kihol
Bazyliszek83: pracuję jako webdeveloper już 3 lata, obecnie w bardzo znanej firmie. Nie powiedziałem, że nie ma innych rozwiązań, napisałem tylko, że to jest najbardziej optymalne (nie tylko pod względem bazy - choć myślę że też), ale również pod względem wykonania (nie trzeba się zastanawiać nad czymś innym).
Oczywiście pięciokrotny select jest też wyjściem tongue.gif
Sil3nt
Jeśli to było pytanie na sprawdzenie kandydata to wcale rozwiązanie nie musi być lepsze od użycia zapytania z klauzulą ORDER BY \ LIMIT. Wg mnie tutaj chodzi o sprawdzenie pomysło9wości pracownika. Lepiej dać jakieś zadanie, na myślenie i inwencję (np. napisanie własnej funkcji która jest już zaimplemenotwana w środowisku) i przyjąć takiego który mysli i potrafi sobie poradzić z takimi problemami.
artega
bazyliszek83, zdaje się, że byliśmy na podobnej rozmowie smile.gif Jeżeli dobrze pamiętam to w moim przypadku miałem pobrać trzech najlepiej zarabiających pracowników bez klauzuli LIMIT i ORDER BY na tabeli o następującej strukturze:

  • [/list]
  • Invision Power Board © 2001-2025 Invision Power Services, Inc.