Maison > Questions et réponses > le corps du texte
D'accord, ma question est un peu spécifique et difficile à expliquer. Je vais donc essayer de le simplifier.
J'ai une table MySQL qui affiche les "astuces" d'un site Web. Les invites sont triées par nombre entier dans la colonne Ordre. Le tableau ressemble donc à ceci : id (incrémentation int), prompt (varchar), order (int).
Maintenant, lorsque la première invite est affichée à l'utilisateur, elle sera affichée jusqu'à ce que l'utilisateur confirme, puis l'invite suivante sera affichée et ainsi de suite.
J'ai proposé une requête pour obtenir le prochain conseil en fonction du dernier conseil confirmé de l'utilisateur :
SELECT hint FROM hints WHERE `order` > $last_seen_item_order ORDER BY `order` DESC LIMIT 1
Cette requête est très utile. Cependant, nous devons parfois ajouter une nouvelle invite, généralement pas à la dernière invite, mais quelque part au milieu. Ainsi, par exemple, l'utilisateur a vu la dernière invite dans la commande n°6, mais nous avons ajouté une nouvelle invite à la position n°3. Cette nouvelle invite ne sera jamais affichée à cet utilisateur car nous avons enregistré qu'il a déjà vu l'invite n°6.
Existe-t-il un moyen de gérer ce problème ? Peut-être qu'une ou deux requêtes MySQL seulement sont nécessaires ?
Merci d'avance pour toute aide et conseils.
EDIT : Chaque utilisateur a son propre « Statut consulté ». Nous l'enregistrons simplement dans le $_SESSION['last_seen_item_order'] de PHP.
P粉7983434152023-09-08 10:34:15
Vous ne pouvez pas le gérer selon cette logique.
Pour cela, vous devez conserver une colonne supplémentaire - seen
Si l'utilisateur l'a déjà vuhints
,您可以将其设置为1
Votre requête sera donc -
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
REMARQUE - C'est ce que je recommande. Vous pouvez avoir bien d’autres idées.
Edit -
Si vous souhaitez conserver les invites par utilisateur, vous pouvez avoir deux options à gérer seen
.
json
maintenues pour les utilisateurs. user_hints_see
, qui contient id
(incrément), user_id
, hint_id
, user_hints_see
的单独表,其中包含id
(自增)、user_id
、hint_id
、seen
Column.