2011-12-12 51 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