0

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

“列表”表

共享表存储已从一个用户共享给另一个用户的所有列表:

“股份”表

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

一旦我从 share 表中删除结果并尝试使用相同的多表 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,但没有看到任何比我所拥有的更有效的东西。

4

1 回答 1

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 中嵌入参数。将您的参数作为参数传递。

于 2016-06-02T15:44:52.090 回答