我正在尝试使用左连接查询来获取最后三个结果。如果用户在搜索字段中输入“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结果资源......”当我尝试上面的查询时。
答案 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()
以查看错误消息。
在您的情况下,可能是因为您的表名为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