Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wybór 4 z 6 kolumn o najniższej wartości z pominięciem zerowych
jareks
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 17.03.2004

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


Witam,

Mam tabelę zawierającą dane z imprezy biegowej. Na imprezę składa się cykl 6 biegów. Tabela prócz takich danych jak id, imię, nazwisko, itd... zawiera również sześć kolumn w formacie czas (hh:mm:ss - wartość domyślna 00:00:00), do których po każdym z biegów wpisuje osiągnięte przez zawodników czasy. Na wynik końcowy składa się suma czterech najlepszych wyników spośród sześciu. Zawodnik ma przy tym możliwość ominięcia dwóch startów - musi skompletować cztery.

Jak spośród wszystkich rekordów tabeli wybrać te, które w polach czas1, czas2, czas3, czas4, czas5, czas6 mają conajmniej cztery wyniki różne od 00:00:00, po czym ze wszystkich tych kolumn od czas1 do czas6 wybrać cztery o najniższej wartości (po sześciu biegach może ich być od 4 do 6), zsumować je i wyniki zapytania posortować, tak by wyświetlić rekordy w kolejności od najniższej sumy do najwyższej?

Będę wdzięczny za jakieś wskazówki lub gotowe rozwiązania smile.gif

Pozdrawiam.
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przede wszystkim masz błędną strukturę bazy danych, która na dobrą sprawę uniemożliwia jakiekolwiek normalne operowanie na niej. Powinieneś mieć dwie tabele:
1. Zawodnicy (id, imie, nazwisko, ...)
2. Biegi (id, id_zawodnika, nr_biegu, czas)
Połączone ze sobą relacją jeden-do-wielu. Wtedy będziesz mógł to osiągnąć w miarę prostym zapytaniem:
  1. SELECT z.*, COUNT(b.id) AS ilosc_biegow, SUM(b.czas) AS laczny_czas
  2. FROM zawodnicy z
  3. JOIN biegi b ON z.id = b.id_zawodnika
  4. GROUP BY z.id
  5. HAVING ilosc_biegow >= 4
To zapytanie zwróci jednak sumę wszystkich 4, 5, bądź 6 biegów. By uzyskać sumę jedynie z 4 najkrótszych będziesz musiał przerobić delikatnie to zapytanie: http://www.xaprb.com/blog/2006/12/07/how-t...r-group-in-sql/

Ten post edytował Crozin 7.07.2014, 08:33:07
Go to the top of the page
+Quote Post
jareks
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 17.03.2004

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


Jakieś sugerowane rozwiązanie? Jestem w połowie imprezy (3 biegi się już odbyły) i niedługo będą musiał coś pokazać smile.gif
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Crozin przedstawił Ci rozwiązanie
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Jakieś sugerowane rozwiązanie?
Przerób bazę danych zgodnie z podanymi wytycznymi - możesz to zrobić kompletnie bezinwazyjnie w tej chwili.
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 Aktualny czas: 21.08.2025 - 14:58