ich ein paar Spieler Aufzeichnungen haben, eine Reihe von Weltrekorden, und eine Reihe von gesperrten Spielern:Auswahl Mindestzeit für jede einzelne Spalte Wert in dem Benutzer nicht verboten ist
describe records
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| type | varchar(3) | NO | MUL | NULL | |
| map | varchar(31) | NO | MUL | NULL | |
| authid | varchar(31) | NO | | NULL | |
| time | decimal(13,6) | NO | | NULL | |
| date | datetime | NO | | NULL | |
+--------+---------------+------+-----+---------+----------------+
describe wrs
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| map | varchar(31) | NO | MUL | NULL | |
| route | varchar(31) | NO | | NULL | |
| time | decimal(5,2) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
describe banned
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| authid | varchar(31) | NO | UNI | NULL | |
+--------+-------------+------+-----+---------+----------------+
Ich versuche, das Minimum time
von der records
Tabelle für jede einzelne map
wo authid
(Spieler-ID) zu wählen ist in der banned
Tabelle nicht gefunden.
Ich möchte auch den Weltrekord time
von wrs
für die gleiche map
abrufen.
Ich mag map
auszuwählen, authid
und time
von records
nur, wenn type
„pro“ ist gleich, aber möchte map
aus der Liste der einzigartigen Karten halten und time
aus der entsprechenden Zeile in wrs
wenn die type
nicht gleich "Profi".
Mein Problem ist das Abrufen der korrekten/authid
aus der records
Tabelle entspricht, wenn die minimale time
/map
abruft. Ich habe es geschafft, so etwas zu tun:
SELECT m.map, minTime, wrTime, wrTime/minTime AS ratio, minTime - wrTime AS diffTime FROM
# get all unique maps from records table
(SELECT map FROM records GROUP BY map) AS m
LEFT JOIN
# find min time for each map where type is pro
(SELECT type, map, MIN(time) AS minTime FROM records WHERE type = "pro" GROUP BY map) AS p
ON m.map = p.map
LEFT JOIN
# find world record time for each map
(SELECT map, MIN(time) AS wrTime FROM wrs GROUP BY map) AS w
ON m.map = w.map
aber nicht für verboten Spieler-Konto, weil ich nicht die richtigen authid
Werte abrufen können, wenn die minimale time
Auswahl (beiseite: Ich bin nicht einmal sicher, die richtige type
würde in der WHERE-Klausel verwendet werden). Ich könnte leicht so etwas wie die folgende zu der Abfrage hinzufügen verboten Spieler zu ignorieren, wenn ich die richtige authid
hatte:
SELECT * FROM records r LEFT JOIN banned b ON r.authid = b.authid WHERE b.authid IS NULL
Hoffentlich habe ich Sinn habe. Wenn nicht, bitte fragen Sie nach weiteren Informationen.
Können Sie Beispieldaten und erwartete Ergebnisse liefern? Wenn Sie es bei [sqlfiddle] (http://sqlfiddle.com) tun könnten, wäre das großartig. –