2014-03-28 4 views
1

안녕하세요, 나는 많은 관계가 많은 3 개의 테이블에 대해 다음과 같은 MYSQL DB 구조를 가지고 있습니다. 많은 사용자가 많은 자동차를 가질 수 있고 자동차는 아래에 보여주는 것처럼 많은 사용자가 될 수 있습니다특정 조건의 레코드를 제외하는 MYSQL 쿼리

사용자

ID | Name 
--------- 
100|John 
101|Smith 

자동차

ID | Name 
--------- 
50|BMW 
60|Audi 

Users_cars

ID | UID | CID 
--------- 
1| 100 |50 
2| 100 |60 
3| 101 |60 

나는이 페이지는 모든 사용자의

  1. 목록 목록 아래로 두 개의 드롭이 users_cars.php 페이지를 사용하면 사용자의 목록에서 사용자를 선택할 수 있습니다
  2. 이 페이지에서

모든 차의

  • 목록 자동차의 목록에서 자동차를 선택한 다음 추가를 클릭하여 users_cars 테이블에 삽입하십시오.

    하려고하는 것은 자동차 테이블에서 사용 가능한 모든 차량과 연결된 모든 사용자를 사용자의 드롭 다운 목록에서 제외하는 것입니다.

    위의 예에서 "Smith"에도 BMW가있는 경우 "John"이 사용할 수있는 모든 자동차 (BMW, AUDI)와 링크되어 있기 때문에 사용자의 드롭 다운 목록에는 "Smith"가 포함됩니다. 이 조건에 대한 선택 쿼리가 필요하며 어떤 중첩 선택 쿼리를 사용하여 users_cars 테이블의 사용자 레코드를 계산하지 않으려합니다.

  • +0

    당신은 적어도 나에게 분명하게하지 않았습니다. 샘플 데이터와 원하는 결과를 제공하여 질문을 편집 할 수 있습니까? –

    +0

    @GordonLinoff 질문이 편집되었습니다. –

    답변

    0

    쿼리 후 GROUP BY을 사용해야하는 경우를 이해합니다.

    SELECT ID, UID FROM Users_cars GROUP BY UID 
    

    모든 자동차 : 그래서 모든 사용자 선택

    SELECT ID, CID FROM Users_cars GROUP BY CID 
    

    그 것이다 당신이 각 사용자의 인스턴스, 또는 각 차량의 인스턴스를 얻을 수 있도록, 동일 그룹 결과 .

    0

    나는 귀하의 질문을 이해할 수 있기를 바랍니다. PHP/MySQL과

    - - 각 사용자에 대한 자동차의 모든 별개의 자동차 ID의

  • 가져 오기 수의

    1. 가져 오기 수

      나는 당신이 그렇게이 어떤 프로그램을 사용하여 수 있다고 생각합니다.

    모든 사용자와 각 루프에서 위의 두 가지를 비교하고이 조건이 일치하는 사용자를 제외하십시오.

    SELECT UID FROM Users_cars WHERE CID NOT IN (SELECT ID FROM Cars); 
    

    그러나 자르, 이것은 욕심 요청입니다 (물론 테이블의 크기에 따라 달라집니다) :

  • 0
    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(*) 
    
    0

    기본적으로, 당신이하고 싶은 것을 (나는 당신의 문제를 이해하는 경우)입니다 사용자 테이블에 플래그를 넣고 사용자가 마지막으로 사용 가능한 자동차 (또는 일괄 처리)를 사용할 때 업데이트해야하므로 너무 자주 요청을 실행하지 않아야합니다.

    +0

    중첩 된 선택 쿼리를 사용하는 것은 제가 권장하지 않는 것입니다. 나는 사용자가 사용 가능한 모든 자동차를 사용했는지 여부를 나타내는 플래그가 있다는 생각을 좋아합니다. –

    관련 문제