1

您好,我有三张表,一张用于用户,一张用于用户服务,一张用于服务

用户表是(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");

然后获取它并回显它但是要获得用户没有的所有服务,我不知道要使用什么查询。请任何帮助

4

3 回答 3

4

使用外连接,它会选择你所有的服务

SELECT * 
FROM services 
LEFT OUTER JOIN userservices ON userservices.serviceid = services.id 
WHERE userservices.userid = '".$user."' 
ORDER BY userservices.startdate DESC";

如果您有来自userservices表中列的数据,则它已连接到用户。如果你不这样做,它没有连接。

然后从 PHP 你可以遍历并检查它们。

于 2013-07-06T20:52:57.587 回答
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。

于 2013-07-06T20:50:51.470 回答
1

尝试使用这样的东西(注意 NOT IN)。

SELECT * FROM services WHERE serviceid NOT IN 
(SELECT serviceid FROM userservices WHERE userid='".$user."') 
ORDER BY serviceid DESC

您也可以使用 (NOT) EXISTS。

于 2013-07-06T20:52:21.657 回答