Ich stecke wieder einmal fest und hoffe auf Hilfe. War fleißig am SQL lernen. Vieles klappt schon wie es soll. Bei zwei Abfragen brauch ich dennoch etwas Unterstützung.
Abfrage 1:
Funktioniert soweit.
Aber... mit den zwei CASE Anweisungen erzeuge ich die Felder points_for_qualifying_pos und points_for_race_pos. Die zwei Felder würde ich gerne noch in einen Rutsch addieren lassen um mir eine weitere Abfrage zu ersparen. Wenn ich allerdings nach der zweiten Case Anweisung
hinzufüge, will MySQL (unter phpMyAdmin) die zwei Felder nicht finden.
Komplette Abfrage:
Abfrage 2:
Es handelt sich um eine Abfrage dreier Tabellen.
Die drei Tabellen habe ich hier nachgebaut und mit Probedaten befüllt.
http://sqlfiddle.com/#!9/9a8cc70/3
Übersicht der Tabellen:
Tabelle driver:
Tabelle singapore_race_result
Tabelle calc_data (Dient nur zur globalen Vergabe von Werten für diverse Berechnungen und Bewertungen):
Die Abfrage:
Ergebnis:
Bislang arbeite ich mit Einzelabfragen für jedes Team und füge die Punkte in php ein. Nachdem ich nun aber eine komplette Auflistung in Tabellenform an anderer Stelle benötige, will ich mir gerne ein view erzeugen, wo alle Daten Griffbereit sind.
Hier noch meine alte Abfrage die jedes Team getrennt behandelt und schlicht den besten Teamfahrer ermittelt.
Seit nun über 8 Stunden scheitere ich kläglich an einer vernünftigen MySQL Lösung.
Abfrage 1:
Funktioniert soweit.
Aber... mit den zwei CASE Anweisungen erzeuge ich die Felder points_for_qualifying_pos und points_for_race_pos. Die zwei Felder würde ich gerne noch in einen Rutsch addieren lassen um mir eine weitere Abfrage zu ersparen. Wenn ich allerdings nach der zweiten Case Anweisung
Code:
, points_for_qualifying_pos + points_for_race_pos AS target_3
Komplette Abfrage:
Code:
SELECT a.driver_id, a.pos AS pos_qualifying, b.pos AS pos_race, c.driver_name, (CASE WHEN a.pos = 1 THEN d.scoring_points_pos_1 / 2 WHEN a.pos = 2 THEN d.scoring_points_pos_2 / 2 WHEN a.pos = 3 THEN d.scoring_points_pos_3 / 2 WHEN a.pos = 4 THEN d.scoring_points_pos_4 / 2 WHEN a.pos = 5 THEN d.scoring_points_pos_5 / 2 WHEN a.pos = 6 THEN d.scoring_points_pos_6 / 2 WHEN a.pos = 7 THEN d.scoring_points_pos_7 / 2 WHEN a.pos = 8 THEN d.scoring_points_pos_8 / 2 WHEN a.pos = 9 THEN d.scoring_points_pos_9 / 2 WHEN a.pos = 10 THEN d.scoring_points_pos_10 / 2 WHEN a.pos = 0 THEN d.scoring_points_pos_nc / 2 ELSE 0 END) AS points_for_qualifying_pos, (CASE WHEN b.pos = 1 THEN d.scoring_points_pos_1 WHEN b.pos = 2 THEN d.scoring_points_pos_2 WHEN b.pos = 3 THEN d.scoring_points_pos_3 WHEN b.pos = 4 THEN d.scoring_points_pos_4 WHEN b.pos = 5 THEN d.scoring_points_pos_5 WHEN b.pos = 6 THEN d.scoring_points_pos_6 WHEN b.pos = 7 THEN d.scoring_points_pos_7 WHEN b.pos = 8 THEN d.scoring_points_pos_8 WHEN b.pos = 9 THEN d.scoring_points_pos_9 WHEN b.pos = 10 THEN d.scoring_points_pos_10 WHEN b.pos = 0 THEN d.scoring_points_pos_nc ELSE 0 END) AS points_for_race_pos FROM calc_data d, driver c RIGHT JOIN singapore_qualifying a ON (c.driver_id = a.driver_id) RIGHT JOIN singapore_race_result b ON (c.driver_id = b.driver_id) ORDER BY points_for_qualifying_pos DESC
Abfrage 2:
Es handelt sich um eine Abfrage dreier Tabellen.
Die drei Tabellen habe ich hier nachgebaut und mit Probedaten befüllt.
http://sqlfiddle.com/#!9/9a8cc70/3
Übersicht der Tabellen:
Tabelle driver:
driver_id | ... | driver_name | real_team_membership | ... |
1 | ... | d1 | t1 | ... |
2 | ... | d2 | t6 | ... |
3 | ... | d3 | t8 | ... |
... | ... | ... | ... | ... |
Tabelle singapore_race_result
driver_id | pos | ... |
... | ... | ... |
Tabelle calc_data (Dient nur zur globalen Vergabe von Werten für diverse Berechnungen und Bewertungen):
id | winner_points | ... |
1 | 7 | ... |
Die Abfrage:
- Ich will per Abfrage alle vorhandenen Fahrer auflisten.
- In einem Fahrerteam sind immer 2 bis 3 Fahrer vorhanden .Die Tabelle "driver" zeigt die Teamzugehörigkeit unter "real_team_membership". Der Teamfahrer der aus seinen jeweiligen Team die beste (niedrigste Zahl aber größer als 0. Bei 0 ist er ausgefallen) Rennposition erzielt (Tabelle singapore_race_result, Spalte pos), soll die "winner_points" aus der Tabelle "calc_data" bekommen. Der Rest bekommt 0 Punkte.
Ergebnis:
driver_id | driver_name | real_team_membership | pos | points |
2 | d2 | t6 | 4 | 7 |
3 | d3 | t8 | 2 | 7 |
4 | d4 | t6 | 0 | 0 |
... | ... | ... | ... | ... |
Hier noch meine alte Abfrage die jedes Team getrennt behandelt und schlicht den besten Teamfahrer ermittelt.
Code:
SELECT driver.driver_id, driver.driver_name, singapore_race_result.pos FROM driver LEFT JOIN singapore_race_result ON driver.driver_id = singapore_race_result.driver_id WHERE real_team_membership = 't1' AND pos >= 1 ORDER BY pos LIMIT 1
Kommentar