此查询仅从登录用户返回列表中的任务。如何调整此查询,以便即使列表中没有任务也会返回一些内容而不是任何内容。
例如,如果登录用户尝试查看不属于他的列表(其他用户列出具有不同ID的用户),则此查询将禁止该查询,因为它将返回空结果。问题是如果列表没有任务,它返回null,即使它是用户(登录)列表。
如果有更好的方法可以在所属的PHP代码中执行此操作,请指出。
表:
用户:user_id(PK),user_name
列表:list_id(PK),list_name,user_id(FK)
任务:task_id(PK),task_name,list_id(FK)
编辑
此查询应显示指定列表(list_id)和用户ID的任务列表。如果用户标识不匹配,则应返回NULL。如果用户有列表但该列表没有任务,则它应返回非NULL值,以便仍然返回列表ID。
SELECT task_name, task_id, l.list_id
FROM task AS t
LEFT JOIN list AS l ON l.list_id = :list_id AND l.list_id = t.list_id
WHERE l.user_id = :user_id
ORDER BY t.task_id
答案 0 :(得分:1)
你的LEFT JOIN
倒退了。 LEFT JOIN
后面应该跟可能没有匹配的表。所以它应该是:
SELECT task_name, task_id, list_id
FROM list as l
LEFT JOIN task AS t
ON l.list_id = t.list_id
WHERE l.user_id = :user_id AND l.list_id = :list_id
ORDER BY t.task_id
答案 1 :(得分:1)
问题出现在WHERE l.user_id =:user_id中,即使您使用LEFT JOIN,列表中的数据也没有返回结果
SELECT task_name, task_id, list_id
FROM task AS t
LEFT JOIN list AS l ON l.list_id = :list_id AND l.list_id = t.list_id AND l.user_id = :user_id
ORDER BY t.task_id
答案 2 :(得分:-2)
SELECT t.task_name, t.task_id, l.list_id
FROM task t
LEFT JOIN list l WHERE l.list_id = :list_id AND l.list_id = t.list_id
AND l.user_id = :user_id
ORDER BY t.task_id