2011-08-30 172 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