2011-08-30 3 views
0

J'essaie d'utiliser une requête de jointure gauche pour obtenir les trois derniers résultats. Si l'utilisateur tape "carl" dans le champ de recherche, il devrait revenir de mysql carl, rick et peter car ils ont le même "pid" et ils sont en dessous de carl dans le tableau.Mysql - aide avec la jointure gauche

SELECT parent.* 
    FROM mytable parent 
LEFT JOIN mytable child 
     ON parent.pid = child.pid 
    WHERE name LIKE '%carl%' 
ORDER by `id` ASC; 

+----+----------+------------+ 
| id | pid |  name | 
+----+----------+------------+ 
| 1 |  null |  dave | 
| 2 |  1 |  mike | 
| 3 |  1 |  carl | 
| 4 |  1 |  rick | 
| 5 |  1 |  peter | 

Je reçois cette erreur « Warning: mysql_fetch_assoc(): argument fourni est pas une ressource de résultat MySQL ... » lorsque je tente la requête ci-dessus.

Répondre

2

Est-ce que l'enfant/parent a une colonne "nom", "id"?

changement quelque chose comme:

SELECT parent.* FROM table parent LEFT JOIN table child on parent.pid=child.pid WHERE parent.name LIKE '%carl%' ORDER by parent.id ASC 

Cordialement

3

Il ne faut pas table mots-clés dans votre FROM clause:

SELECT parent.* FROM parent LEFT JOIN child on parent.pid=child.pid WHERE name LIKE '%carl%' ORDER by `id` ASC 

Toujours test si le résultat est valide et appeler mysql_error() sinon, pour trouver la raison de l'échec.

$result = mysql_query(...); 
if (!$result) { 
    // error in query 
    echo mysql_error(); 

} 
0

Tout d'abord, vérifiez toujours l'état d'erreur, ou bien vous êtes dépannage aveugle. Si la requête comporte une erreur, mysql_query() renvoie false au lieu d'une ressource de résultat. C'est pourquoi mysql_fetch_assoc() ne peut pas réussir, parce que vous lui demandez d'aller chercher les résultats de false.

Si vous obtenez false alors il y a une erreur dans votre requête, et vous devriez appeler mysql_error() pour voir le message d'erreur.

Voir « Exemple # 1 incorrect requête » dans le manuel pour mysql_query()

Dans votre cas, il pourrait être parce que votre table est nommée table. Ceci est un SQL reserved words. Vous devez utiliser back-ticks pour le délimiter.

Vous devez également qualifier name avec son alias de table, sinon il est ambigu qu'il s'agisse de la colonne name de parent ou enfant.

SELECT parent.* FROM `table` parent 
LEFT JOIN `table` child on parent.pid=child.pid 
WHERE parent.name LIKE '%carl%' ORDER by `id` ASC 
Questions connexes