recherche
Maisonbase de donnéestutoriel mysqlComment récupérer efficacement la dernière publication de chaque auteur dans MySQL ?

How to Efficiently Retrieve the Latest Post for Each Author in MySQL?

Récupération du dernier message par auteur dans MySQL : utiliser JOIN au lieu de trier par avant, grouper par

Lorsque vous essayez de récupérer le dernier message pour chaque auteur dans une base de données, l'approche initiale utilisant une clause ORDER BY avant GROUP BY dans MySQL donne souvent des résultats indésirables. Cependant, l'utilisation d'une sous-requête pour trier les lignes avant le regroupement peut être une solution potentielle.

Pourquoi trier par avant de regrouper par peut être problématique

Considérez l'exemple de requête :

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author           
ORDER BY wp_posts.post_date DESC

Bien que cette requête vise à regrouper les publications par auteur et à renvoyer la dernière publication pour chacune, elle peut échouer lorsqu'il y a plusieurs publications avec le même date_post. Dans de tels cas, l'ordre dans lequel les messages sont renvoyés au sein de chaque groupe d'auteurs devient imprévisible, conduisant à des résultats incohérents.

Utiliser une sous-requête pour résoudre le problème

Le modèle proposé La solution à ce problème consiste à utiliser une sous-requête comme suit :

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 

En utilisant cette sous-requête, les publications sont d'abord classées par leur post_date par ordre décroissant. La table de sous-requête résultante sert ensuite de source pour la requête principale, garantissant que les dernières publications sont placées en haut de chaque groupe d'auteurs avant le regroupement.

Une approche alternative avec JOIN

Une autre approche efficace pour récupérer le dernier message par auteur consiste à utiliser une opération JOIN. La requête suivante illustre cette méthode :

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc

Cette requête comporte deux étapes :

  1. Une sous-requête trouve la post_date maximale et le post_author correspondant pour chaque auteur.
  2. La requête principale rejoint la table contenant les publications avec le résultat de la sous-requête à la fois sur post_date et post_author, récupérant ainsi la dernière publication pour chaque auteur.

Conclusion

Bien que l'utilisation d'une sous-requête pour trier les lignes avant le regroupement puisse être une solution efficace pour récupérer le dernier message par auteur, ce n'est pas le seule approche disponible. L'opération JOIN fournit une méthode alternative à la fois efficace et produisant des résultats fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
MySQL Blob: Y a-t-il des limites?MySQL Blob: Y a-t-il des limites?May 08, 2025 am 12:22 AM

MySqlBlobShavelimits: Tinyblob (255 bytes), blob (65 535 bytes), Mediumblob (16 777 215 bytes), et Longblob (4 294 967 295 bytes). Obseffectively: 1) considérer la compréhension de l'Impacts et de laARGELLOBBOBSEXTERNELLEMENT; 2)

MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?May 08, 2025 am 12:22 AM

Les meilleurs outils et technologies pour automatiser la création d'utilisateurs dans MySQL incluent: 1. MySQLWorkbench, adapté à des environnements petits et moyens, faciles à utiliser mais une consommation de ressources élevées; 2. ANSIBLE, adapté aux environnements multi-serveurs, courbe d'apprentissage simple mais abrupte; 3. Scripts Python personnalisés, flexibles mais doivent assurer la sécurité des scripts; 4. Puppet et chef, adapté aux environnements à grande échelle, complexes mais évolutifs. Les besoins d'échelle, de courbe d'apprentissage et d'intégration doivent être pris en compte lors du choix.

MySQL: Puis-je rechercher dans un blob?MySQL: Puis-je rechercher dans un blob?May 08, 2025 am 12:20 AM

Oui, YouCansearchInSideAblobinMysQlutingSpecifiCTechniques.1) ConvertTheBlobtoAutf-8StringWithConvertFunctionandSearchusingLiliN.2) ForcompressedBlobs, useUncompressBeForEConversion.3)

Types de données MySQL String: un guide completTypes de données MySQL String: un guide completMay 08, 2025 am 12:14 AM

MysqloffersvariousStringDatatypes: 1) CharForfixed-LengthStrings, idéalforcenthenglenthDatalikEcountryCodes; 2) varcharforvariable-lengthstrings, adaptFieldsLikenames; 3) textTypesForLargerText, bonforblogpostsbutcanimpactperformance; 4) binaryvarb

Master MySQL Blobs: un tutoriel étape par étapeMaster MySQL Blobs: un tutoriel étape par étapeMay 08, 2025 am 12:01 AM

Tomastermysqlblobs, suivi de l'essence: 1) ChooseTheApproProProprepropriéBlobType (TinyBlob, Blob, moyenblob, longblob) BasedAdatasize.2) INSERTDATAUSINGLOAD_FILEFERAFFICY

Blob Type de données dans MySQL: un aperçu détaillé des développeursBlob Type de données dans MySQL: un aperçu détaillé des développeursMay 07, 2025 pm 05:41 PM

BLOBDATATYTYSINMYSQLAREUSEUSEFORVORAGELLARGEBINALDATALIKEIMAGSORAUDIO.1) USEBLOBTYPES (TINYBLOBTOLONGBLOB) BASEDATADATASIZENEDES. 2) StoreBlobsin Perplate PetoopTime Performance.3) Considérants

Comment ajouter des utilisateurs à MySQL à partir de la ligne de commandeComment ajouter des utilisateurs à MySQL à partir de la ligne de commandeMay 07, 2025 pm 05:01 PM

ToadDuserstomysqlfromTheCommandline, LoginaSroot, TheSusecreateUser'Username '@' host'identifiedBy'password '; TOCREATEEEWUSER.GRANTERMISSIONSWITHGRANTALLPRIVILEGESONDATABASE.

Quels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléQuels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléMay 07, 2025 pm 03:33 PM

MysqlofferseightStringDatatypes: char, varchar, binaire, varbinaire, blob, texte, énumé

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP