您好我有三个表用于用户,一个用于用户服务,一个用于服务
Users表是(id,用户名,电子邮件,密码)
并且
服务表是(id,Servicename,Servicesdetails,price)
并且
userservices表是(id,userid,serviceid,startdate,enddate)
当用户登录他的仪表板时,他可以看到他拥有的所有服务。 他没有的服务。 对于他所有的服务,我使用了这个查询并且工作得很好。
$mysql_servicesadded = "SELECT * FROM services INNER JOIN userservices ON userservices.serviceid = services.id WHERE userservices.userid = '".$user."' ORDER BY userservices.startdate DESC";
$query_servicesadded = $dblink->query($m$mysql_servicesadded) or die ("Cannot Get Services");
然后获取它并回显它 但要获得所有服务用户没有我不知道使用什么查询。 请任何帮助
答案 0 :(得分:4)
使用外部联接,它将为您选择所有服务
SELECT *
FROM services
LEFT OUTER JOIN userservices ON userservices.serviceid = services.id
WHERE userservices.userid = '".$user."'
ORDER BY userservices.startdate DESC";
如果您有来自userservices
表的列的数据,则表示该数据已连接到该用户。如果你不这样做,它就没有连接。
然后从PHP中你可以迭代并检查它们。
答案 1 :(得分:2)
使用NOT EXISTS子查询:
SELECT
*
FROM
services
WHERE
NOT EXISTS(
SELECT
userservices.serviceid
FROM
userservices
WHERE
userservices.serviceid = services.id
AND
userservices.userid = '".$user."'
)
http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
我认为,由于我们选择的服务没有附加到此用户,因此无需ORDER BY userservices.startdate。
答案 2 :(得分:1)
尝试使用类似的东西(注意NOT IN)。
SELECT * FROM services WHERE serviceid NOT IN
(SELECT serviceid FROM userservices WHERE userid='".$user."')
ORDER BY serviceid DESC
您也可以使用(NOT)EXISTS。