Php 在特定条件下排除记录的MYSQL查询
嘿,我为3个具有多对多关系的表提供了以下MYSQL DB结构。许多用户可以拥有许多汽车,汽车也可以为许多用户提供,如下所示: 用户Php 在特定条件下排除记录的MYSQL查询,php,mysql,inner-join,select-query,Php,Mysql,Inner Join,Select Query,嘿,我为3个具有多对多关系的表提供了以下MYSQL DB结构。许多用户可以拥有许多汽车,汽车也可以为许多用户提供,如下所示: 用户 ID | Name --------- 100|John 101|Smith ID | Name --------- 50|BMW 60|Audi ID | UID | CID --------- 1| 100 |50 2| 100 |60 3| 101 |60 汽车 ID | Name --------- 100|John 101|Smith ID | N
ID | Name
---------
100|John
101|Smith
ID | Name
---------
50|BMW
60|Audi
ID | UID | CID
---------
1| 100 |50
2| 100 |60
3| 101 |60
汽车
ID | Name
---------
100|John
101|Smith
ID | Name
---------
50|BMW
60|Audi
ID | UID | CID
---------
1| 100 |50
2| 100 |60
3| 101 |60
用户\汽车
ID | Name
---------
100|John
101|Smith
ID | Name
---------
50|BMW
60|Audi
ID | UID | CID
---------
1| 100 |50
2| 100 |60
3| 101 |60
我有一个页面users_cars.php这个页面有两个下拉列表
在上面的示例中,用户的下拉列表中只有“Smith”,因为“John”与所有可用汽车(宝马、奥迪)关联,如果“Smith”也有宝马,他将被排除在列表之外。我需要一个用于此条件的select查询,如果在查询中需要使用
GROUP BY
后我了解您的身份,我不想使用任何nest select查询来统计users\u cars表中的用户记录。因此,要选择所有用户:
SELECT ID, UID FROM Users_cars GROUP BY UID
对于所有汽车:
SELECT ID, CID FROM Users_cars GROUP BY CID
这将对相同的结果进行分组,因此您只能获得每个用户的一个实例,或者每个汽车的一个实例。我希望我正确理解了您的问题 我想你可以通过一些编程来实现这一点- 使用PHP/mysql-
循环所有用户,并在每个循环中比较以上两个,排除与此条件匹配的用户。基本上,您要做的是(如果我了解您的问题):
SELECT *
FROM users
WEHRE id NOT IN (SELECT uid
FROM (SELECT uid, COUNT(cid), COUNT(*)
FORM cars
LEFT OUTER JOIN users_cars ON cars.id = users_cars.cid
GROUP BY uid
HAVING COUNT(cid) = COUNT(*)
但请小心,这是一个贪婪的请求(当然取决于表的大小),您最好在用户表上放置一个标志,然后在用户使用最后一辆可用的汽车(或批次)时进行更新,这样您就不会经常运行请求了 至少对我来说,你还没有说清楚。您可以编辑您的问题,提供示例数据和所需结果吗?@GordonLinoff问题已编辑是的,但我不建议使用嵌套选择查询。我喜欢有一个标志,表明用户是否使用了所有可用的汽车的想法