Eine Kleinanzeige wird von einem Benutzer erstellt und in dieser Tabelle gespeichert:
Code: Select all
CREATE TABLE `classifieds` (
`ClassifiedAdID` mediumint NOT NULL,
`CustomerID` smallint NOT NULL,
`AdTitle` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
`AdText` varchar(8192) COLLATE utf8mb4_general_ci NOT NULL,
`AdImageList` varchar(4096) COLLATE utf8mb4_general_ci NOT NULL,
`Status` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`DateSubmitted` datetime NOT NULL,
`ExpiryDate` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Code: Select all
CREATE TABLE `officeaction` (
`OfficeActionID` mediumint NOT NULL,
`FormContext` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`FormID` smallint NOT NULL,
`Result` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`ActionByID` smallint NOT NULL,
`ActionBy` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`Remarks` varchar(8096) COLLATE utf8mb4_general_ci NOT NULL,
`ActionDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Code: Select all
SELECT classifieds.*, officeaction.*
FROM `classifieds`
JOIN `officeaction` ON classifieds.ClassifiedAdID = officeaction.FormID
WHERE officeaction.FormContext = 'Classifieds'
ORDER BY classifieds.ClassifiedAdID, officeaction.ActionDate DESC;

Wie Sie sehen können, wurde die Kleinanzeige Nr. 11 einmal abgelehnt und zweimal angenommen, und „Akzeptieren“ ist die letzte Aktion. Ich möchte also diesen Datensatz erhalten (OfficeActionID #11). Wenn ich jedoch GROUP BY (wie unten) verwende, erhalte ich den ältesten Datensatz (OfficeActionID #9), nicht den neuesten. Da ich nach Datum sortiere (DESCending), sollte ich bekommen, was ich will, aber anscheinend (laut der Dokumentation, die ich finden konnte) kann man nicht vorhersagen, welcher Datensatz angezeigt wird.
Wie kann ich eine Abfrage schreiben, die mir gibt, was ich will? Ich habe mir diese Frage und ihre Antworten angesehen (ich habe die Antworten in MySQL übersetzt), aber sie funktioniert bei mir nicht.