2011-12-12 68 views
1

我有3個表格。MySQL與關係搜索

user 
    id 
    firstname 
    lastname 
    ... 

user_rel_domain 
    user_id 
    domain_id 
    value 

domain 
    id 
    name 

我想進行搜索,將匹配名字,姓氏和域姓名(或名稱)如果user_rel_domain值高於0

我怎麼能這樣做這在一個單一的MySQL查詢?

編輯:

好吧,我雖然,這個想法會很容易地從3代表例如整合,但其實我有6張桌子,我不認爲答案可用於結構我真的,所以這裏,對不起大家!:

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,如果其他不匹配?我需要檢查數據是否爲空? – 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