我有两张桌子:
帖子:
id | id_author | content | year
1 | 1 | hello | 2015
2 | 1 | world | 2016
3 | 2 | hi | 2016
收藏夹:
id | id_author | id_post | year
1 | 3 | 2 | 2016
我想SELECT
使用posts
通过favorites
获取LEFT JOIN
数据。所以我做了: (
考虑到我使用id_author = 3)
SELECT p.id, p.id_author, p.content, p.year, f.id_post
FROM favorites f
LEFT JOIN posts p
ON f.id_post = p.id
WHERE f.id_author = 3
ORDER BY f.id
DESC
所以,我做了:($sql
等于上面的查询)
if(count($sql) > 0) {
var_dump($sql);
}
但输出是:
array(1) {
[0]=>
array(5) {
["id"]=>
NULL
["id_author"]=>
NULL
["content"]=>
NULL
["year"]=>
NULL
["id_post"]=>
string(1) "2"
}
}
为什么要返回NULL
?
答案 0 :(得分:2)
鉴于OP的模式和数据,以下查询在语法上无效:
SELECT p.id, p.id_author, p.content, p.year, f.id_post
FROM favorites f
LEFT JOIN posts p
ON f.id_post = p.id
WHERE id_author = 3
ORDER BY f.id DESC
因为WHERE
子句的谓词所使用的字段存在歧义:id_author = 3
。
您很可能拥有p.id_author = 3
,这意味着LEFT JOIN
子句使用WHERE
操作的 right 表的字段。这会将LEFT JOIN
转换为INNER JOIN
操作,不会产生任何结果。所以,你可能不得不使用:
WHERE f.id_author = 3