MySQL 如果两个表都有行,则仅查询 returns 结果
MySQL query only returns results if both tables have rows
问题:
在我的 mysql 数据库中,我有两个 tables lists 和 shares。 列表 table 包含用户创建的所有待办事项列表:
shares table 存储一个用户与另一个用户共享的所有列表:
我想要做的是获取用户的所有列表,包括他们创建的列表以及他们有权访问的共享列表。目前,我有一个 select 语句,当共享 table 中有一个条目时,它可以完美地工作(不管它是否与我为其检索结果的特定用户相关)。
一旦我从共享 table 中删除结果并尝试使用相同的 multi-table 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,但没有看到任何比我拥有的更有效的东西。
你真的应该使用 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 中嵌入参数。将您的参数作为参数传递。
问题: 在我的 mysql 数据库中,我有两个 tables lists 和 shares。 列表 table 包含用户创建的所有待办事项列表:
shares table 存储一个用户与另一个用户共享的所有列表:
我想要做的是获取用户的所有列表,包括他们创建的列表以及他们有权访问的共享列表。目前,我有一个 select 语句,当共享 table 中有一个条目时,它可以完美地工作(不管它是否与我为其检索结果的特定用户相关)。
一旦我从共享 table 中删除结果并尝试使用相同的 multi-table 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,但没有看到任何比我拥有的更有效的东西。
你真的应该使用 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 中嵌入参数。将您的参数作为参数传递。