2011-08-30 13 views
0

左結合クエリを使用して、最後の3つの結果を取得しようとしています。ユーザーが検索フィールドに「carl」と入力すると、Mysql carl、rick、およびpeterから同じ「pid」があり、テーブルの中にあるcarlの下にあるので、それを返す必要があります。Mysql - 左結合のヘルプ

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 | 

私は、このエラー「:mysql_fetch_assoc():警告を与えられた引数は、有効なMySQLの結果リソースではありません...」を取得私は上記のクエリをしようとします。

答えて

2

"名前"、 "id"の列はありますか?

変更それは何かのように:

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

よろしく

3

あなたFROM句にはtableキーワードがあってはなりません:あなたの結果が有効でない場合は、失敗の理由を見つけるために、mysql_error()を呼び出す場合

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

必ずテスト。

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

} 
0

まず、常にエラー状態を確認したり、他のあなたは盲目のトラブルシューティングをしています。クエリにエラーがある場合、mysql_query()は結果リソースの代わりにfalseを返します。そのため、falseから結果を取得するよう依頼しているため、mysql_fetch_assoc()は成功できません。

falseが表示される場合は、クエリにエラーがあり、エラーメッセージを表示するにはmysql_error()に電話する必要があります。あなたのケースではmysql_query()

ため

マニュアルの「例#1無効なクエリに」あなたのテーブルがtable命名されているので、それは可能性があります。これはSQL reserved wordsです。あなたはそれを区切るためにバックティックを使用する必要があります。

また、nameのテーブルエイリアスを修飾する必要があります。そうでない場合は、親または子のnameカラムかどうか不明です。

SELECT parent.* FROM `table` parent 
LEFT JOIN `table` child on parent.pid=child.pid 
WHERE parent.name LIKE '%carl%' ORDER by `id` ASC 
関連する問題