2013-09-05 2 views
0

에 의해 많은 위해 많은 :나는 다음과 같은 테이블이있다 relantionship

+---------+ +-----------+  +---------+ 
| USER | | USER_BOX |  | BOX  | 
| id  | | user_id |  | id  | 
| name | | box_id |  | name | 
|   | |   |  |   | 
+---------+ +-----------+  +---------+ 

내가 모든 상자를 나열하지만, ​​사용자와 관계가있는 모든 상자를 가지고로 DB를 조회하면된다하고자하는 것은 나열하기 첫 번째 및 번만. 나는 붙어있어 MySql이 그러한 쿼리를 지원하는지조차 확신하지 못한다. 아이디어는 사용자가 조회 할 수있다, 그래서 큰 목록에있는 사용자 상자의 위치를 ​​쉽게 :

4 - boxy 
3 - Okbox 
0 - Boobox  
1 - RedBox 
2 - GGbox 

편집 :

 USER     BOX     USER_BOX 
+--------|--------+  +--------|--------+ +--------|--------+ 
| 0 | Jonh |  | 0 | Boobox | | 0 | 4 | 
+--------|--------+  | 1 | RedBox | | 0 | 3 | 
         | 2 | GGbox | +--------|--------+ 
         | 3 | OKbox | 
         | 4 | boxy | 
         +--------|--------+ 

결과 쿼리가 반환해야합니다. 이 같은

+4

이 질문은 해결책을 찾는 노력은없는 것 같다 때문에 오프 주제 것으로 보인다. – Itay

+0

좋은 지적으로, 지금까지 시도한 것을 보여주십시오. –

+0

나는 특히 내가 전혀 효과가 없었기 때문에 내가 한 일을 보여주기 위해 창피하다. – localhost

답변

1
SELECT b.id, b.name 
FROM BOX b 
LEFT JOIN (
    USER_BOX ub 
    JOIN USER u ON (user_id = u.id) 
) ON (box_id = b.id) 
ORDER BY 
    u.id IS NULL, 
    b.id DESC 

http://sqlfiddle.com/#!2/a4f304/4/0

편집 : 사실 USER에 가입 할 필요가 없습니다.
http://sqlfiddle.com/#!2/a4f304/7/0

+0

하하! 귀하의 솔루션이 더 좋습니다. +1 알약;) –

+0

사용자 상자 관계가 하나 이상인 경우 http://sqlfiddle.com/#!2/edda0/1로 계속 인쇄됩니다. 강조 할 질문을 업데이트하겠습니다. – localhost

+0

@localhost 그냥'선택 DISTINCT'를 사용하십시오 –

0

뭔가 :

SELECT a.id, a.name 
FROM BOX AS a 
LEFT JOIN USER_BOX AS b 
ON a.id = b.box_id 
ORDER BY CASE WHEN b.box_id IS NOT NULL THEN 0 ELSE 1 END 
     ,a.id 
0
SELECT * FROM BOX 
WHERE box_id IN (SELECT box_id FROM USER_BOX) 
UNION ALL 
SELECT * FROM BOX 
WHERE box_id NOT IN (SELECT box_id FROM USER_BOX)