MySQL クエリで迷っています (実行中MySQL 5.0.88
)
私は 2 つのテーブルを持っています。1 つはproducts
from differentbrands
で、もう 1 つは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
どうもありがとうございました!