我需要從m
表拿到最後n
記錄(可以說m
= n
=〜10現在)按日期排序(也支持抵消會很好)。這應該向用戶展示他最後的活動。這些表格將包含該用戶的大部分數百或數千條記錄。 我該如何做到最有效的方式?我正在使用Doctrine 2,這些表格沒有任何關係。高效的方式來獲得按日期排序多個表最後n條記錄(用戶活動日誌)
我雖然對一些解決方案,不知道什麼最好的方法:
- 創建單獨的表,並把記錄在那裏。如果發生任何更改(如果用戶在系統內部進行任何應該在日誌表中顯示的更改),它將被插入到此表中。這應該是非常快的,但它很難管理,我不想使用這種方法。
- 獲取每張表的最後
n
記錄,然後對它們進行排序(超出數據庫)並限制爲n
。這似乎很簡單,但有了更多的表格,會有很高的開銷。對於10個表格,90%的記錄將被丟棄。如果使用偏移量,則會更糟糕。這也意味着m
查詢。 - 創建單個本機查詢並獲取最後
n
項目的所有表的聯合的id
和type
項目。像SELECT id, date, type FROM (SELECT a.id, a.date, 'a' AS type FROM a ORDER BY a.date DESC LIMIT 10 UNION b.id, b.date, 'b' AS type ORDER BY b.date DESC LIMIT 10) ORDER BY date DESC LIMIT 10
。然後創建最多m
查詢獲取這些實體。這應該比2.更好一些,但需要原生查詢。
是否有任何其他方式如何獲取這些記錄?
謝謝
爲什麼有m個表格而不是1個? – Strawberry
好吧,可以說有一個表購買和討論。我想顯示第一條記錄爲'您在下午3點購買了',第二條'您在下午2點做了評論',第三條'您在下午1點發表了評論'並提供了一些詳細信息 –