Un article et ses métadonnées vivent dans deux tables séparées : impossible d’afficher un titre accompagné de sa note de lecture sans réunir ces deux sources en une seule requête. C’est précisément ce que permet cette opération, au cœur de quasi toute requête un peu élaborée sur une base relationnelle.
INNER, LEFT et leur usage dans WordPress
Une jointure INNER JOIN ne conserve que les lignes présentes des deux côtés, tandis qu’une LEFT JOIN conserve toutes les lignes de la table de gauche même sans correspondance à droite, en complétant de NULL. La classe WP_Query construit elle-même des jointures internes vers wp_postmeta ou wp_term_relationships dès qu’on utilise meta_query ou tax_query ; le filtre posts_join permet d’en ajouter une supplémentaire à la main.
Exemple
SELECT p.post_title, m.meta_value AS note
FROM wp_posts p
INNER JOIN wp_postmeta m
ON m.post_id = p.ID AND m.meta_key = 'note_lecteur'
WHERE p.post_status = 'publish';
Bon à savoir
- Sur une base volumineuse, joindre une table sans condition sur une colonne indexée produit un plan d’exécution coûteux : vérifiez toujours l’index avant d’optimiser autre chose.
- Le filtre
posts_joindeWP_Querydoit être combiné avecposts_whereet souventposts_distinctpour éviter les doublons de résultats liés à des correspondances multiples. - Une jointure n’est pas une fusion de structure : les colonnes des deux tables restent distinctes dans le résultat, simplement juxtaposées ligne par ligne.
- Une
RIGHT JOINexiste symétriquement à laLEFT JOIN, mais reste rarement utilisée en pratique : la plupart des développeurs préfèrent inverser l’ordre des tables et n’écrire que des jointures gauches, plus lisibles à la relecture.