Php 在特定条件下排除记录的MYSQL查询

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

嘿,我为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 | 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这个页面有两个下拉列表

  • 所有用户的列表
  • 所有汽车的清单
  • 在此页面中,您可以从用户列表中选择一个用户,并从车辆列表中选择一辆汽车,然后单击“添加”将其插入到“用户\汽车”表中

    我试图做的是从用户的下拉列表中排除所有与cars表中所有可用汽车链接的用户


    在上面的示例中,用户的下拉列表中只有“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-

  • 获取所有不同车辆ID的计数
  • 获取每个用户的车辆数。(确保仅列出唯一的车辆ID)

  • 循环所有用户,并在每个循环中比较以上两个,排除与此条件匹配的用户。

    基本上,您要做的是(如果我了解您的问题):

    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问题已编辑是的,但我不建议使用嵌套选择查询。我喜欢有一个标志,表明用户是否使用了所有可用的汽车的想法