![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Heja. Mam baze z kolumnami:
Imie | nazwisko | czas_1 | czas_2 | czas_3 | Jakim zapytaniem pobrac z bazy najmniejszy czas (ale rozny od 0) sposrod trzech pol z czasem? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Kod SELECT
CASE WHEN (czas_1 > czas_2) THEN CASE WHEN (czas_1 > czas_3) THEN czas_1 ELSE czas_3 end; ELSE CASE WHEN (czas_2 > czas_3) THEN czas_2 ELSE czas_3 end; END; Czy jakoś tak... Pewnie mozna prościej, ale tak też będzie działać |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
A jak ustawic sortowanie po najmniejszym z tych trzech pol?
Zalozmy, ze mam takie trzy wiersze: Kod Imie | Nazwisko | czas_1 | czas_2 | czas_3 |
------------------------------------------------------ 1 1 1.81 1.76 1.49 -------------------------------------------------------- 2 2 2.97 1.93 1.01 -------------------------------------------------------- 3 3 1.94 1.53 1.56 -------------------------------------------------------- I chce, aby wyniki byly ulozone w kolejnosci uzyskania najnizszego czasu, czyli tak: Jako pierwszy 2 Jako drugi 1 Jako trzeci 3 |
|
|
![]()
Post
#4
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
jak już zadziała zapytanie? Dokładnie tak jak zawsze. Co najwyżej, aby uprościć sprawę ustawiasz, by porzednie wyrażenie podawane było as czas_min a następnie order by czas_min
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Nie dziala (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Jakbys mogl zerknac w to zapytanie i powiedziec, co jest nie tak to bylbym bardzo wdzieczny (uproscilem je na razie do dwoch pol z czasami) [php:1:c269fbc8fe] $query = " SELECT * CASE (czas_1 > czas_2) THEN czas_1 as czas_min ELSE czas_2 as czas_min END FROM zgloszenia_sss WHERE klasa='MINI' AND (czas_1 != '' OR czas_2 != '') ORDER BY czas_min "; [/php:1:c269fbc8fe] Nie dziala to gdyz przy fetch_array wyskakuje mi error (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:apachehtdocsmwyniki.php on line 14 Linijka 14 jest postaci [php:1:c269fbc8fe] while ($row = mysql_fetch_array($do)) [/php:1:c269fbc8fe] Wczesniej jest query. |
|
|
![]()
Post
#6
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
troszkę się nie zrozumieliśmy.
1. oczywiście błąd jest w zapytaniu, na przyszłość, przynajmniej na czes testów pisz $wynik = mysql_query($pyt) or die ("bład zapytania: $pyt"); 2. zapytanie ma wyglądać tak: (u mnie działa) Kod SELECT `nazwa`,
( CASE WHEN ( `czas_1` > `czas_2` ) THEN `czas_1` ELSE `czas_2` END ) AS czas FROM `tabela` 3. as zawsze stawia sie po wyrażeniu, nie w środku. Tu wyrażenie zaczyna się od case, kończy na end. 4. Gdy natrafiasz na taki problem, to zazwyczaj okazuje sie, że najlepszym rozwiażaniem jest zmiana budowy bazy danych. Wszystko mozna uprościć... |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Uratowales mnie, dzieki wielkie! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
______________________________________________ post zmoderowany - prosze ostroznie z wulgaryzmami pozdrawiam Itsme ______________________________________________ |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Niestety, wraz z rozwojem bazy, problem powrocil ze zdwojona sila (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Obecnie kolumn z czasem mam az 10... a moje zadanie polega na wybraniu 10 najnizszych czasow ze wszystkich 10 kolumn... robienie to poprzez warunki chyba nie ma sensu. Ktos ma jakis pomysl na w miare proste zapytanie? |
|
|
![]()
Post
#9
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
I tu objawia sie wartość wykłądów na temat projektowania baz danych.
Rozwiązanie, które próbujesz zmontować jest niestety wysoce niewydajne, i to zarówno pod względem budowania interfejsu, jak i pod względem prędkości działania. Jak więc to zrobić lepiej? Dzielisz dane na 2 tablice: 1. users id | nazwa | data | ... 2. wyniki id | user_id | wynik A zapytanie? Kod SELECT
`users`.`id`, `users`.`nazwa`, MIN(`wyniki`.`wynik`) as `najmniejsz_wynik` FROM`users` LEFT JOIN `wyniki` on (`users`.`id` = `wyniki`.`user_id `) GROUP BY `users`.`id` Co wiecej w ten sposób nic nie ogranicza Cię do określonej ilości danych. A mozę kiedyć będzie potrzeba ich jeszcze więcej niż 10? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Rozwiazalem to w ten sposob, ze wszystkie czasy z pol czas_1 do czas_10 wrzucam do nowej tabeli, wraz z id... i teraz selectowanie 10 najlepszych dziala bez problemu, ale (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) :
- uzytkownik o danym id ma wpisane 5 czasow, a ja chce pobrac dla kazdego tylko po jednym, najnizszym czasie. Macie pomysl jak to zrobic? |
|
|
![]()
Post
#11
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Ktoś nie czyta dokładnie odpowiedzi...
Najmniejszy wynik dla określonego usera: Kod SELECT
`users`.`id`, `users`.`nazwa`, MIN(`wyniki`.`wynik`) as `najmniejsz_wynik` FROM`users` LEFT JOIN `wyniki` on (`users`.`id` = `wyniki`.`user_id `) WHERE `users`.`id` = '$id_wybranego_usera' Najmniejsze wyniki wszystkich w poście powyżej... |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie poradzilem sobie z problemem tak jak mowil DeyV i w miedzyczasie wyszla mi potrzeba sklecenia nowej tabeli, w ktorej wrzucam wszystkie czasy wszystkich zawodnikow.
Wyglada to np tak: Kod id | czas
---------- 1 12.34 1 11.34 1 10.34 2 13.14 2 14.14 2 15.14 and so on... Potrzebuje wybrac dla kazdego id najmniejszy osiagniety czas, czyli: id | czas ---------- 1 10.34 2 13.14 and so on... |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 7.05.2002 Skąd: Sz-n/Wroc/Wawa Ostrzeżenie: (0%) ![]() ![]() |
Kod select min(czas) from tabela group by id
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Nie dziala - tzn dziala, ale wcale nie pobiera najmniejszego czasu. Konkretnie zapytanie jest takie:
Kod SELECT MIN( czas ) , numer, nazwisko FROM `wyniki_all_sss` GROUP BY id ORDER BY czas
|
|
|
![]()
Post
#15
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Znowu masz źle zaprojektowaną bazę (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Te 2 tabele powinny wygądać mniej więcej tak: User: id | imie | ... Czasy: id | user_id | time Zapytanie mniej-więcej: Kod SELECT user.id, user.imie, min(`czasy.time`)
FROM`tabela` LEFT JOIN `czasy` on ( user.id = czasy.user_id) GROUP BY user.id |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 23.03.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Problem rozwiazalo takie zapytanie: ((IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D:D)
Kod SELECT MIN( czas ) AS czas, id, numer, samochod, klasa
FROM wyniki_all_sss WHERE czas != '' GROUP BY id ORDER BY czas LIMIT 0 , 10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 12:37 |