Mysql - 帮助左连接

时间:2011-08-30 23:44:45

标签: mysql

我正在尝试使用左连接查询来获取最后三个结果。如果用户在搜索字段中输入“carl”,它应该从Mysql carl,rick和peter返回,因为它们具有相同的“pid”并且它们位于表中的carl下方。

   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结果资源......”当我尝试上面的查询时。

3 个答案:

答案 0 :(得分: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();

}

答案 1 :(得分: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

此致

答案 2 :(得分:0)

首先,始终检查错误状态,否则您将盲目排除故障。如果查询中包含错误,mysql_query()将返回false而不是结果资源。这就是mysql_fetch_assoc()无法成功的原因,因为您要求它从false获取结果。

如果您获得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