チャームのように機能するクエリがありますが、現在GROUP_CONCAT
作成されているフィールドにある値でフィルタリングする必要があります。HAVINGを使用してフィルタリングできることを学びましたが、6、16、26HAVING groupconcatname LIKE '%6%'
などを見つけるために使用する構文が見つかりません。ステートメント内で「8」を見つけることができるように、特定の値を検索する必要があります。 groupconcatを含み、 8 AND 18 AND 581,5,8,18,30,58
が見つからないのは、LIKE'%%'を使用したためです。
私のクエリ(現在は機能しますが、の部分一致に基づいて結果が多すぎます%6%
):
SELECT offers.*, s.short_name AS sponsorName, s.logo AS sponsorLogo, GROUP_CONCAT( mn.title) titles,
GROUP_CONCAT( mo.`name`) metas, GROUP_CONCAT( om.meta_option) AS meta_ids
FROM offers
INNER JOIN offer_metas as om ON om.offer_id = local_ld_offers.id
INNER JOIN meta_options as mo ON om.meta_option = mo.id
INNER JOIN meta_names as mn ON mo.category = mn.category AND mo.cat_seq = mn.seq
LEFT JOIN sponsors AS s ON s.id=offers.sponsor
GROUP BY offers.id
HAVING meta_ids LIKE '%6%'
ORDER BY end_date ASC
私はHAVING meta_ids LIKE '%6%'
もっと似たものに置き換える必要がありますが、HAVINGステートメントを置き換えようとすると、 WHEREWHERE '6' IN meta_ids
が機能するのに合理的な試みのように見えますが、それは私の句で使用する有効な変数/フィールドであるという事実を無視し、エラーになります。meta_ids
何かお勧めはありますか?
ありがとう、
シルバータイガー
更新-よりエレガントな方法がない限り解決
以下のThomasの推奨事項に基づいて、クエリを更新しました。次のように更新されたメソッドを使用してオプションごとに行を追加することで、必要な数の個別の値を検索できるようです。
WHERE EXISTS( SELECT * FROM offer_metas AS om1 WHERE om1.meta_option = mo.id AND om1.meta_option = '23')
OR EXISTS( SELECT * FROM offer_metas AS om1 WHERE om1.meta_option = mo.id AND om1.meta_option = '16')