Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Podzapytanie SQL
Forum PHP.pl > Forum > Przedszkole
karolusgt
Witam.
Mój problem polega na tym iż nie wiem jak skonstruować zapytanie do bazy danych. Mam bowiem tabelkę z polami id, name, score, time, date. Score to wynik testu w % a time to czas rozwiązywania tego testu w s. Jestem w stanie wyświetlić zawartość tabelki (wq score) od max do min. i nie jest to chyba wielką sztuką. Tu jednak pojawia się problem, ponieważ wyniki często się powtarzają (score) natomiast czas rozwiązywania testów jest różny. Dlatego też trzeba posortować tym razem od min do max wg czasu rozwiązywania testu.
Krótko mówiąc chodzi o to żeby tak skonstruować zapytanie, aby wyświetlić ranking osób, które uzyskały max wynik ( i dodatkowo w jak najkrótszym czasie).
Z góry dziękuję za pomoc smile.gif
wookieb
  1. ORDER BY wynik DESC, time
karolusgt
Chyba nie do końca o to mi chodziło!!!
Sęk w tym że wynik ma być wyświetlany od max do min i dla poszczególnych wyników dodatkowo sortowany wg czasu (od min do max) czyli odwrotnie jak to miało miejsce w przypadku wyniku.
np:
name: score: time:
x 60% 12s
x1 50% 23s
x2 50% 45s
x3 50% 46s

....
wookieb
No a przeciez taki order BY jaki ci dałem tak sortuje
Najpierw sortuje wynik od nawiekszego do najmniejszego. A nastepnie jezeli jakis wyniki beda takie same to posortuje je według czasu.
Czyli jednym słowem "Czy sprawdziłeś jak to działa?"
Jak tak to pokaż zapytanie i przykładowe wyniki jakie otrzymujesz.

P.s. Po time Możesz dodać jeszcze ASC
karolusgt
score ma byc DESC, time ma być ASC dla poszczególnych wyników. Wyniki mają być malejąco i dla poszczególbych wyników czas ma być rosnąco. Dodałem ASC ale nie działa SQL wyrzuca błąd w zapytaniu sad.gif
wookieb
Pokaż zapytanie.
Wiem o co ci chodzi, jednakże teraz któryś z parametrów musi być ważniejszy (dlatego takie ułożenie w order by) i jeżeli zastosowałeś tak zapytanie jak podałem to dostałeś rekordy w takiej kolejności jak dałeś w przykładzie.

A jeżeli masz rekordy takie:
score;time
60; 11
50; 10

To jak je chcesz ułożyć?
karolusgt
Mam takie zapytanie:
$query1 = "SELECT * from network_easy order by score DESC, time ASC";
Wynik jest następujący:

Nick Wynik(%) Czas(s)
kg 50 15
kg 40 13
kg 40 13
kg 30 11
kg 30 11
kg 20 11
kg 20 11
kfre 10 10
kg 10 13
jh 10 5
kg 0 12
kg 0 2
utr 0 3
kg 0 4


Przy 10% widać że osoba która zrobiła test w 13sekund jest lepsza niz osoba która zrobiła to samo w 5 sekund. Jak widać sortuje wyniki dobrze, jednak nie sortuje poszczególnych wyników wq czasu rozwiązania. Nie wiem jak to przeskoczyć sad.gif
PS: Sorki jeśli trochę mało czytelne
nospor
a pole "czas" w bazie to ty trzymasz jako tekst czy jako liczba? Bo mam nieodparte wrazenie ze jako tekst....
karolusgt
Heh... faktycznie był VARCHAR. Z góry dzięki za pomoc i sorki że marudziłem smile.gif
Zapraszam na Piwo do Olsztyna.
snitch.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.