2011-08-30 75 views
0

我試圖使用左連接查詢來獲取最後三個結果。如果用戶在搜索字段中鍵入「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

應該沒有table關鍵字在你FROM條款:如果

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

始終測試你的結果是有效的,並呼籲mysql_error()如果沒有,找到失敗的原因。

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

} 
0

首先,經常檢查錯誤狀態,否則您要解決盲目。如果查詢中有錯誤,mysql_query()將返回false而不是結果資源。這就是爲什麼mysql_fetch_assoc()不能成功,因爲你要求它從false獲取結果。

如果您收到false,則表示您的查詢存在錯誤,您應該致電mysql_error()查看錯誤消息。

請參閱「示例#1無效查詢」手冊中的mysql_query()

你的情況,可能是因爲你的表名爲table。這是一個SQL reserved words。你需要使用back-ticks來分隔它。

此外,你應該限定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