2

我迷失了 MySQL 查询(正在运行MySQL 5.0.88

我有两张表,一张带有productsfrom different brands,另一张带有applications(=应用程序过滤产品,因此并非每个应用程序都显示每个产品)。

我正在尝试根据用户正在运行的应用程序查询以获取品牌列表,如下所示:

SELECT    p.brand_name
        , p.id
        , p.seller_id
        , a.seller_id
        , a.info  
        , a.name
        , a.application_match_keys  

    FROM  applications AS a 
    LEFT JOIN products AS p
        ON a.seller_id = p.seller_id    
        AND p.brand_name IN ( <<QueryString: application_match_keys>> )

    WHERE  p.active = "1"
    AND    a.seller_id = "2222222222222"

    GROUP BY p.brand_name
    ORDER BY p.brand_name ASC 

问题是,一旦我这样做了,left join我就不再得到正确的结果,例如:

=== products ===
id        brand_name  seller_id
123       A           John
111       A           John
124       A           John
999       B           John
xx1       C           John

=== applications ===
name    seller_id   info  application_match_keys
red     John        foo   A
blue    John        bar   B,C

如果用户在应用程序 A 中,他的品牌列表应该只包括来自具有相应 match_keys (= A) 的活跃产品的品牌,所以我希望查询返回

p.brand_name  application   info
A             red           foo

但我总是得到正确的品牌名称和不匹配的应用程序数据,如下所示:

p.brand_name  application   info
A             blue          bar

问题:
有没有办法在单个查询中进行查询,还是我必须先查询active products' brands with matching application key然后再次循环/查询才能获取我需要的应用程序数据?也必须在单个查询中实现吗?

感谢帮助!

编辑:
明白了。这是它的工作原理:

SELECT    p.brand_name
        , p.id
        , p.seller_id
        , a.seller_id
        , a.info  
        , a.name
        , a.application_match_keys 

FROM  applications AS a 
LEFT JOIN products AS p
    ON a.seller_id = p.seller_id
    AND p.brand_name IN ( <<QueryString: application_match_keys>> )
    AND FIND_IN_SET( a.application_match_keys, <<QueryString: application_match_keys>>) <> 0    

WHERE  p.active = "1"
AND    a.seller_id = "2222222222222"

GROUP BY p.brand_name
ORDER BY p.brand_name ASC 

非常感谢你!

4

1 回答 1

1

如何使用FIND_IN_SET

AND FIND_IN_SET(p.brand_name, a.application_match_keys) <> 0
于 2012-11-29T06:57:21.903 回答