Hallo zusammen,
ich bin dabei ein Questsystem zu schreiben und hänge gerade bei einer MySQL Query fest. Ich habe mich nie sonderlich mit MySQL beschäftigt und mittlerweile komme ich wohl an meine Grenzen.
SELECT id, text, level, typ
FROM quests
WHERE id NOT IN (
SELECT questId
FROM questsUsers
WHERE userId='steamid:xxxxx'
) AND typ NOT IN (
SELECT quests.typ
FROM questsUsers, quests
WHERE questsUsers.userId='steamid:xxxxx'
AND quests.id = questsUsers.questId
GROUP BY quests.typ
) ORDER BY level ASC;
Alles anzeigen
Das ist meine bisherige SQL-Abfrage.
Ich will nur den niedrigsten Wert der aufgelisteten Daten mit gleichem Typ selektieren.
mysql_problem.pngWenn ich an das Ende der Query GROUP BY typ anhänge, werden zwar die Einträge gruppiert, jedoch - da die IDs von der kleinen zur großen Quest verlaufen - auf das größte Level (mom. Level 8 ) statt auf das Level 1 bzw. 2 (je nachdem, welches das niedrigste Level eines Typs der Einträge ist).
Jemand vielleicht eine Idee?
Und nein, WHERE level = 1 bringt mir nichts, da manche Quests eines Typs auch erst bei Level 3 anfangen und dann auch ausgewählt werden sollen, wenn sie die niedrigsten ihres Typs sind.
// edit
Okay habe es hinbekommen, ist wohl ein sehr besonderes Problem bei MySQL: https://dev.mysql.com/doc/refm…mum-column-group-row.html
(Im Endeffekt doch einfacher als gedacht)
Lösung:
SELECT typ, id, level
FROM quests q1
WHERE level = (
SELECT min(q2.level)
FROM quests q2
WHERE q1.typ = q2.typ
) AND id NOT IN (
SELECT questId
FROM questsUsers
WHERE userId='steamid:xxxxx'
) AND typ NOT IN (
SELECT quests.typ
FROM questsUsers, quests
WHERE questsUsers.userId='steamid:xxxxx'
AND quests.id = questsUsers.questId
GROUP BY quests.typ
) ORDER BY level;
Alles anzeigen