Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybór 4 z 6 kolumn o najniższej wartości z pominięciem zerowych
Forum PHP.pl > Forum > Bazy danych > MySQL
jareks
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.
Crozin
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/
jareks
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
Pyton_000
Crozin przedstawił Ci rozwiązanie
Crozin
Cytat
Jakieś sugerowane rozwiązanie?
Przerób bazę danych zgodnie z podanymi wytycznymi - możesz to zrobić kompletnie bezinwazyjnie w tej chwili.
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.