问题:在我的mysql数据库中,我有两个表list和share。该名单表有所有的待办事项用户所创建的:
该股份表存储已经从一个用户共享给其他所有的名单:
我要做的是获取用户的所有列表,包括他们创建的列表以及他们有权访问的共享列表。当前,当shares表中有一个条目时,我有一条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,但是还没有看到比我所拥有的更有效的东西。
您确实应该使用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中嵌入参数。将参数作为参数传递。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句