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

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

我有一个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学习者快速成长!