2011-12-12 3 views
1

3 개의 테이블이 있습니다.관계가있는 MySQL 검색

user 
    id 
    firstname 
    lastname 
    ... 

user_rel_domain 
    user_id 
    domain_id 
    value 

domain 
    id 
    name 

내가의 LASTNAME 및 user_rel_domain의 값이 내가 할 수있는 방법 더 높은 다음 0

경우 도메인 (들)의 이름 (들)이 FIRSTNAME을 일치합니다 검색을하고 싶습니다 이 단일 MySQL 쿼리에?

편집 :

좋아,하지만이 아이디어는 3 개 테이블의 예에서 쉽게 통합 될 것이지만, 실제로 6 개 테이블이 내가 답변이 구조에 사용할 수 있다고 생각하지 않는 I 정말, 그래서 여기에있는 그것은, 죄송합니다 모두 내가 모든 "이름"열에서 검색 할 기본적으로

user 
    id 
    firstname 
    lastname 
    ... 

user_rel_domain 
    user_id 
    domain_id 
    value 

domain 
    id 
    name 

user_rel_mandate 
    user_id 
    mandate_id 
    value 

mandate 
    id 
    cat_id 
    name 

mandate_cat 
    id 
    name 

을 !:되고 사용자 테이블의 이름 및 성이 관계 테이블에서 모든 값이 높은 반면 그 다음 0.

답변

3

편집는 :

SELECT 
    u.firstName, 
    u.lastName, 
    d.name AS domainName, 
    m.name AS mandateName, 
    mc.name AS mandateCatName 
FROM 
    user u 
    JOIN user_rel_domain urd ON urd.user_id = u.id AND urd.value > 0 
    JOIN domain d ON d.id = urd.domain_id 
    JOIN user_rel_mandate urm ON urm.user_id = u.id AND urm.value > 0 
    JOIN mandate m ON m.id = urm.mandate_id 
    JOIN mandate_cat mc ON mc.id = m.cat_id 
WHERE 
    u.firstName = @SearchTerm 
    OR u.lastName = @SearchTerm 
    OR d.Name = @SearchTerm 
    OR m.Name = @SearchTerm 
    OR mc.Name = @SearchTerm 
+0

: 그와 X – Manhim

+0

을, 그때 가장 높은 최소 1 개 값이 있음을 확인할 수있을 것입니다 방법 다른 하나가 일치하지 않는 경우 0? 데이터가 null인지 확인해야합니까? – Manhim

+0

죄송합니다. 찾고 계신 것이 무엇인지 명확하게 설명해 주시겠습니까? –

2
SELECT user.firstname, user.lastname FROM user 
JOIN user_rel_domain ON user.id=user_rel_domain.user_id 
JOIN domain ON domain.id=user_rel_domain.domain_id 
WHERE user_rel_domain.value>0 

이 편집 : 당신이 정확하게 일치하는, 예를 들면 이름을 찾고 있습니다 흠 ... 그래서이 야구장에 있으면 알려주세요, 당신의 새로운 요구 사항에 대해 몇 가지 가정을 만들어 모든 열에서 찾고있는 문자열과 같아야합니다? 또는 이름 중 하나라도 동등하면 충분합니까? 어쩌면이 다음

: 내 첫 번째 게시물, 미안 편집 한

SELECT user.firstname, user.lastname FROM user 
JOIN user_rel_domain ON user.id=user_rel_domain.user_id 
JOIN domain ON domain.id=user_rel_domain.domain_id 
JOIN user_rel_mandate ON user.id=user_rel_mandate.user_id 
JOIN mandate ON user_rel_mandate.mandate_id=mandate.id 
JOIN mandate_cat ON mandate.id=mandate_cat.mandate_ID 
WHERE 
user_rel_domain.value>0 AND 
(user.firstname="string" OR user.lastname="string" OR domain.name="string" OR mandate.name="string") 
+0

첫 번째 게시물을 수정했습니다. 미안합니다 : X – Manhim

2
SELECT u.firstname, u.lastname, d.name 
    FROM user_rel_domain urd 
     INNER JOIN user u 
      ON urd.user_id = u.id 
     INNER JOIN domain d 
      ON urd.domain_id = d.id 
    WHERE urd.value > 0; 
+0

첫 번째 게시물을 수정했습니다. 미안 해요 : X – Manhim