如果两个表都有行,则MySQL查询仅返回结果

时间:2016-06-02 15:32:24

标签: mysql database multi-table

问题: 在我的mysql数据库中,我有两个表列表共享列表表包含用户创建的所有待办事项列表:

'lists' Table

shares 表存储了从一个用户到另一个用户共享的所有列表:

'shares' table

我想要做的是获取用户的所有列表,包括他们创建的列表以及他们有权访问的共享列表。目前,我有一个select语句,当共享表中有一个条目时它是完美的(如果它与我检索结果的特定用户有关,则无关紧要)。

一旦我从shares表中删除结果并尝试使用相同的多表SELECT语句,我就没有得到任何结果,我无法弄清楚原因。

这是我使用的SELECT语句:

SELECT DISTINCT `lists`.* FROM `lists`,`shares` WHERE `lists`.user_id = '$userid' OR (`shares`.sharedwith_id = '$userid' AND `lists`.id = `shares`.list_id) ORDER BY `lists`.datecreated DESC

对查询的任何帮助都很棒。我看过JOIN,但没有看到任何比我更有效率的东西。

1 个答案:

答案 0 :(得分:1)

你真的应该使用JOIN而不是WHERE子句:

SELECT DISTINCT `lists`.* 
FROM `lists`
LEFT JOIN `shares`
ON `lists`.`id`=`shares`.list_id AND `lists`.`user_id`=`shares`.`sharedwith_id`
WHERE `lists`.`id` = ?

最后,避免SQL注入攻击:永远不要在SQL中嵌入参数。将您的参数作为参数传递。