Question

En gros, j'ai une requête mysql ressemblant à ceci:

mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");

Et ce que je dois faire, c'est saisir le titre du tableau des messages et la valeur du vote actuel du tableau des votes.

Pour le moment, les votes ne sont pas stockés dans la table des votes sauf si un vote a lieu. Ainsi, tous les messages avec 0 votes ne sont pas dans le tableau des votes.

Cela provoque une erreur en essayant d’obtenir le titre ET la valeur de vote, où post id = l’ID de valeur du vote. S'il n'y a aucun enregistrement dans la table des votes, alors la valeur doit être retournée sous la forme NULL ou 0, mais pour le moment, la requête entière renvoie la valeur null, de sorte que je ne peux même pas renvoyer le titre.

Comment puis-je résoudre ce problème en une seule requête? Je ne veux pas avoir à utiliser plusieurs requêtes ... Merci:)

Était-ce utile?

La solution

Utilisez une jointure gauche au lieu d'une jointure interne

Une jointure interne requiert des lignes correspondantes de la table des deux côtés de la jointure.

Une jointure gauche (ou une jointure externe gauche utilisant son nom complet) sélectionne toutes les lignes de la table de gauche, puis les lignes correspondantes de la droite, renvoyant des valeurs NULL s'il n'y a pas de lignes correspondantes dans la table de droite, exactement comme vous. demandent.

(Il existe également des jointures externes droites, mais le même effet peut être obtenu en modifiant les conditions autour de la clause ON)

Autres conseils

SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id

SÉLECTIONNER n.title, v.value FROM messages en tant que n, votes en tant que v WHERE n.id = v.id

Essayez ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top