哪些不同記錄 ID 是最新的?
在給定的資料庫表中,某些記錄透過共用列互連。目標是識別與此共享列值關聯的最新三個不同記錄標識符。
要實現此目的,請考慮下面的範例表:
id | time | text | otheridentifier |
---|---|---|---|
1 | 6 | apple | 4 |
2 | 7 | orange | 4 |
3 | 8 | banana | 3 |
4 | 9 | pear | 3 |
5 | 10 | grape | 2 |
最初,直觀的方法可能是按 otheridentifier 列進行分組,然後按時間降序排序。但是,此方法不會產生預期的結果:
SELECT * FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3;
此查詢會錯誤地包含 id 為 3 和 1 的記錄,而不是正確的 id 4 和 2。造成這種差異的原因在於查詢執行order:分組優先於排序。
為了獲得預期的結果,更複雜的解決方案是必需:
SELECT * FROM `table` WHERE `id` = ( SELECT `id` FROM `table` as `alt` WHERE `alt`.`otheridentifier` = `table`.`otheridentifier` ORDER BY `time` DESC LIMIT 1 ) ORDER BY `time` DESC LIMIT 3;
此修改後的查詢利用子查詢為每個不同的otheridentifier 值選擇具有最新時間值的單一id。此最佳化查詢可確保不同記錄標識符 5、4 和 2 的所需輸出。
以上是如何根據共用列找到最近的三個不同記錄 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!