我迷失了 MySQL 查询(正在运行MySQL 5.0.88
)
我有两张表,一张带有products
from 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
非常感谢你!