国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

在MySQL中,如何在按排序列排序的同時(shí)考慮資料的時(shí)間變化來(lái)取得下一行資料?
P粉420958692
P粉420958692 2023-09-07 14:37:40
0
1
658

好的,我的問題有點(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']中。

P粉420958692
P粉420958692

全部回覆(1)
P粉798343415

您不能按照這種邏輯來(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。

  1. 為使用者維護(hù)json格式的已看到提示。
  2. 建立一個(gè)名為user_hints_see的單獨(dú)表,其中包含id(自增)、user_id、hint_id、seen列。
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板