MySQL如何调整此查询

时间:2014-12-10 17:49:38

标签: mysql

此查询仅从登录用户返回列表中的任务。如何调整此查询,以便即使列表中没有任务也会返回一些内容而不是任何内容。

例如,如果登录用户尝试查看不属于他的列表(其他用户列出具有不同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

3 个答案:

答案 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