MySQL搜索关系

时间:2011-12-12 19:57:00

标签: mysql

我有3张桌子。

user
    id
    firstname
    lastname
    ...

user_rel_domain
    user_id
    domain_id
    value

domain
    id
    name

如果user_rel_domain中的值高于0,我想进行与firstname,lastname和domain(s)名称匹配的搜索。

如何在单个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

基本上我想搜索所有“name”列以及user表的firstname和lastname,而关系表中的所有值都高于0。

3 个答案:

答案 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

答案 1 :(得分: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")

答案 2 :(得分: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;