Hallo Dennis,
da du das ergebnis eh auch einen datensatz beschränkst, kann man die abfrage auch umschreiben, indem man nach domain_id sortiert und die korrelierte unterabfrage wegläßt.
^^ Danke für deine Antwort. Kannst di mir diesen Teil aber bitte nochmal etwas ausführlicher erklären?
wieviele Datensätze erhältst Du durch den Einsatz von LIMIT 1
?
Oha, genau einen.
Genau aus diesem Zweck kannst Du die teure korrelierte Unterabfrage gleich weglassen. Sie filtert Dir nur Datensätze aus, die Du eh' nicht benötigst.
Du bist an den Einträgen interessiert, die einen bestimmten ip-Wert ausweisen und deren scan_id den höchsten Wert zu diesem ip-Wert aufweist:
SELECT
COUNT(r.id), -- zähle die id-Werte
r.scan_id -- und gib mir die Werte der scan_id
FROM
results r
WHERE
r.ip = <wert> -- zu einer bestimmten ip
GROUP BY
r.scan_id -- gruppiert nach den scan_id-Werten
-- Anmerkung: manche DBMS wollen diese Spalte dann
-- auch in der Spaltenliste haben
ORDER BY
r.scan_id DESC -- absteigend sortiert nach der scan_id, so dass die
-- größte scan_id im ersten Datensatz steht
LIMIT 1 -- und gib mir nur den ersten Datensatz zurück.
Dieses Statement versagt, sobald Du mehr als einen Datensatz haben willst.
Freundliche Grüße
Vinzenz