好的,我的问题有点具体,很难解释。所以我会尽量简化。
我有一个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粉7983434152023-09-08 10:34:15
您不能按照这种逻辑来管理它。
为此,您需要维护一个额外的列 - 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
。
json
格式的已看到提示。user_hints_see
的单独表,其中包含id
(自增)、user_id
、hint_id
、seen
列。