好的,我的問題有點(diǎn)具體,很難解釋。所以我會(huì)盡量簡(jiǎn)化。
我有一個(gè)MySQL表格,裡面顯示著網(wǎng)站上的「提示」。這些提示會(huì)依照「順序」列中的整數(shù)排序。所以表格看起來(lái)像這樣:id(int自增),提示(varchar),順序(int)。
現(xiàn)在,當(dāng)?shù)谝粋€(gè)提示顯示給使用者時(shí),它會(huì)一直顯示,直到使用者確認(rèn),然後顯示下一個(gè)提示,依此類推。
我想出了一個(gè)查詢,根據(jù)用戶上次確認(rèn)的提示來(lái)獲取下一個(gè)提示:
SELECT hint FROM hints WHERE `order` > $last_seen_item_order ORDER BY `order` DESC LIMIT 1
這個(gè)查詢很好用。然而,我們有時(shí)也需要添加新的提示,通常不是添加在最後一個(gè)提示,而是在中間某個(gè)位置。所以例如,使用者看到了順序?yàn)?6的最後一個(gè)提示,但我們?cè)谖恢?3新增了新的提示。這個(gè)新的提示將永遠(yuǎn)不會(huì)顯示給這個(gè)用戶,因?yàn)槲覀円呀?jīng)保存了他已經(jīng)看過提示#6。
有沒有辦法來(lái)管理這個(gè)問題?可能只需要一個(gè)或兩個(gè)MySQL查詢嗎?
提前感謝任何幫助和提示。
編輯:每個(gè)使用者都有自己的「已看狀態(tài)」。我們簡(jiǎn)單地將其保存在PHP的$_SESSION['last_seen_item_order']中。
您不能按照這種邏輯來(lái)管理它。
為此,您需要維護(hù)一個(gè)額外的欄位 - seen
如果使用者已經(jīng)看到了hints
,您可以將其設(shè)定為1
因此,您的查詢將是 -
SELECT hint FROM hints WHERE `order` > last_seen_item_order OR seen = 0 ORDER BY CASE WHEN `order` > last_seen_item_order THEN `order` END DESC CASE WHEN `order` <= last_seen_item_order THEN `id` END ASC LIMIT 1
注意 - 這是我建議的做法。您可以有很多其他的想法。
編輯 -
如果您想要按使用者維護(hù)提示,那麼您可能有兩個(gè)選項(xiàng)來(lái)維護(hù)seen
。
json
格式的已看到提示。 user_hints_see
的單獨(dú)表,其中包含id
(自增)、user_id
、hint_id
、seen
列。