Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] jak dodać kolejną kolumnę do wyniku
SeN
post 30.07.2008, 10:59:49
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 18.01.2008

Ostrzeżenie: (0%)
-----


Mam taki problem.
Mam 3 tabele.
1 przechowuje nazwy tras
id|nazwa
2 przechowuje nazwy użytkowników
id|user_name
3 przechowuje wyniki
id| id_trasy | id_usera | wynik

Zapytanie ma za zadanie wyswietlic wszystkie trasy i najwyższy wynik dla kazdej z nich , w przypadku braku wyniku dla danej trasy wyswietalny jest 'brak'. Teraz pytanie, jak mam dodać do wyniku kolejna kolumne w której znajdowała by się informacja o tym który user uzyskał ten wynik.

Moje zapytanie aktualnie wyglada tak
  1. SELECT nazwa, IFNULL( (
  2.  
  3. SELECT max( cast( wynik AS UNSIGNED ) )
  4.  
  5. FROM src_wyniki WHERE src_trasy.id = src_wyniki.id_trasy ) , 'brak') AS best
  6.  
  7. FROM src_wyniki, src_trasy
  8.  
  9. GROUP BY nazwa

kombinuje na różne strony i wykombinować nie moge sadsmiley02.gif
Go to the top of the page
+Quote Post
ddiceman
post 30.07.2008, 11:47:06
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Pisane z glowy, wymaga sprawdzenia
  1. SELECT nazwa, IFNULL(MAX(wynik), 'brak') AS maksymalny_wynik FROM src_trasy LEFT JOIN src_wyniki ON src_trasy.id = src_wyniki.id_trasy GROUP BY src_trasy.id;
Go to the top of the page
+Quote Post
JoShiMa
post 30.07.2008, 12:08:36
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Może w sekcji pomiędzy SELECT a FROM powinieneś wstawić jakieś dobrze obmyślone podzapytanie


--------------------
Go to the top of the page
+Quote Post
SeN
post 30.07.2008, 12:34:05
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 18.01.2008

Ostrzeżenie: (0%)
-----


Chyba nie bardzo zrozumiałes o co mi chodzi, bo twoje zapytanie owszem działa ale wyświetla to samo co moje zapytanie. Ja potrzebuje żeby wy wyniku były trzy kolumny. W pierwszej nazwa trasy, w drugiej najwyższy wynik na danej trasie oraz w trzeciej nazwa usera który ten wynik uzyskał.

Patrząc na tp co napisałes mam coś takiego.
  1. SELECT nazwa, IFNULL( max( cast( wynik AS UNSIGNED ) ) , 'brak' ) AS maksymalny_wynik, user_name
  2. FROM src_trasy LEFT JOIN src_wyniki ON src_trasy.id = src_wyniki.id_trasy
  3. INNER JOIN ep_users ON ep_users.user_id = src_wyniki.id_kierowcy
  4. GROUP BY src_trasy.id

Trzecia kolumna została dołaczona ale pojawiają się tam złe wartości.
CAST jest wymagany poniewaz kolumna wynik nie jest typu liczbowego

Edit.
Ciągle nie moge tego rozgryść.Aktualnie mam coś takiego
  1. SELECT nazwa, max( wynik ), u.user_name
  2.  
  3. FROM src_trasy t
  4.  
  5. LEFT JOIN src_wyniki w ON t.id = w.id_trasy
  6.  
  7. LEFT JOIN (SELECT user_id , user_name FROM ep_users) u ON w.id_kierowcy=u.user_id
  8.  
  9. GROUP BY t.id


Tylko jest dziwna sprawa bo to zpytanie nie wywala ani żadnego błedu ani żadnego wyniku. Mógłby ktoś obeznany z tematem powiedziec mi czy to zapytanie ma sens ?

Ten post edytował SeN 11.08.2008, 12:40:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:04