在MySQL中,如何在按排序列排序的同时考虑数据的时间变化来获取下一行数据?
P粉420958692
P粉420958692 2023-09-07 14:37:40
0
1
495

好的,我的问题有点具体,很难解释。所以我会尽量简化。

我有一个MySQL表格,里面显示着网站上的“提示”。这些提示按照“顺序”列中的整数排序。所以表格看起来像这样:id(int自增),提示(varchar),顺序(int)。

现在,当第一个提示显示给用户时,它会一直显示,直到用户确认,然后显示下一个提示,依此类推。

我想出了一个查询,根据用户上次确认的提示来获取下一个提示:

SELECT hint FROM hints WHERE `order` > $last_seen_item_order ORDER BY `order` DESC LIMIT 1

这个查询很好用。然而,我们有时也需要添加新的提示,通常不是添加在最后一个提示,而是在中间某个位置。所以例如,用户看到了顺序为#6的最后一个提示,但我们在位置#3添加了新的提示。这个新的提示将永远不会显示给这个用户,因为我们已经保存了他已经看过提示#6。

有没有办法来管理这个问题?可能只需要一个或两个MySQL查询吗?

提前感谢任何帮助和提示。

编辑:每个用户都有自己的“已看状态”。我们简单地将其保存在PHP的$_SESSION['last_seen_item_order']中。

P粉420958692
P粉420958692

全部回复(1)
P粉798343415

您不能按照这种逻辑来管理它。

为此,您需要维护一个额外的列 - seen 如果用户已经看到了hints,您可以将其设置为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

注意 - 这是我建议的做法。您可以有很多其他的想法。

编辑 - 如果您想要按用户维护提示,那么您可能有两个选项来维护seen

  1. 为用户维护json格式的已看到提示。
  2. 创建一个名为user_hints_see的单独表,其中包含id(自增)、user_idhint_idseen列。
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!