2009-01-23 5 views
0

Fondamentalement, j'ai une chose de requête MySQL comme ce qui suit:MySQL se joindre à l'aide de requêtes

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 est de saisir le titre de la table des postes et la valeur actuelle de vote de la table votes.

Pour le moment, les votes ne sont pas stockés dans la table des votes, sauf si un vote se produit. Donc, tous les messages avec 0 votes ne sont pas dans la table des votes.

Cela provoque une erreur qu'il essaie d'obtenir le titre ET la valeur de vote où l'ID de publication = l'ID de valeur de vote. S'il n'y a aucun enregistrement dans la table des votes, alors la valeur devrait retourner comme NULL ou 0 mais pour le moment la requête entière retourne comme nulle ainsi je ne peux même pas retourner le titre.

Comment est-ce que je peux résoudre ceci dans une requête? Je ne veux pas avoir à utiliser plusieurs requêtes ... Merci :)

Répondre

4

Utilisez une jointure gauche au lieu d'un intérieur

Une jointure interne nécessite des lignes correspondantes de la table des deux côtés de la jointure. Une jointure gauche (ou une jointure externe gauche pour utiliser son nom complet) sélectionne toutes les lignes de la table de gauche, puis les lignes correspondantes de droite, en renvoyant des valeurs nulles s'il n'y a aucune ligne correspondante dans la table de droite, comme vous demandez.

(Il y a aussi droit jointures externes, mais le même effet peut être obtenu en modifiant les conditions autour de la clause ON)

+0

Montre combien je sais! Merci beaucoup! –

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

SELECT n.title, v.value de messages comme n, votes comme v WHERE n.id = v.id

Essayez cela.

+0

C'est ce que j'avais avant et cela fonctionnait avant, donc par défaut, MySQL doit utiliser LEFT JOIN. Ce n'est que maintenant que lorsque j'ai réécrit la requête, j'ai décidé d'utiliser INNER JOIN qui a tout chamboulé. Merci :) –

+0

S'il vous plaît faites-le dans l'autre sens. La syntaxe JOIN explicite est beaucoup plus facile à suivre, et comme en témoigne ici, le type de jointure que vous obtenez dans cette syntaxe n'est pas toujours clair. Sur les autres back-ends SQL, vous n'obtiendrez pas une jointure à gauche telle qu'écrite. – Joe