J'utilise MySQL 8.
J'ai un système de messages avec un schéma, comme: p> si j'ai quatre lignes dans le message ... Et puis je interne la table, alors je m'attends à un ensemble de résultats qui est un "instantané" des derniers messages non lâchés , avec une distinction faite sur le Cependant, lorsque j'exécute la requête ci-dessous: P> < PRE> XXX PRE> Mon ensemble de résultats ressemble à ceci: p> Il ignore essentiellement complètement le groupe code> table, comme ceci: p> to_id code>, pour ressembler à ceci: p> par code> clause ici. J'ai déjà passé beaucoup de temps à ce sujet, je n'arrive pas à comprendre. Qu'est-ce que je fais mal? P> p>
3 Réponses :
Si vous souhaitez le dernier message pour chaque paire d'utilisateurs, je commencerais avec la sous-requête corrélée: Je ne sais pas ce que l'autre filtrage est pour votre requête. < / p> Vous pouvez également faire cela avec les fonctions de fenêtre: p> car la table est uniquement référencée une fois, cela facilite la mise en place d'autres tables et filtres. p> p>
L'autre filtrage est pour la pagination rapide, donc comme où Message.Id> 100 limite 100 code> à la page via la table plus efficacement que limite 100 100 code>. Mais de toute façon, cela n'est pas pertinent pour cela, donc je l'ai supprimé. Merci pour votre suggestion, essayez-la maintenant.
pourrait-il être aussi simple que:
select max(id) id, max(to_id) to_id, from_id from... group by from_id
Utilisez cette requête:
select `distinct message.id, message.to_id, message.from_id`
Que se passe-t-il avec les alias de table de compte? Cela semble trop compliqué. Voir ici ... dev.mysql.com/doc/refman/8.0 /en/join.html
Votre requête a un groupe par
Message.Id code> qui a la définitionID INT non signé non null auto_incrètent code>. Ainsi, les entrées de la table basées sur ID seront toujours uniques alors regroupement parMessage.Id code> retournera tous les résultats.