1

私はMYSQLクエリの詳細を学んでいますが、プロジェクトで障害に遭遇しました。解決策に到達するための助けをいただければ幸いです。

2つのテーブルがあります。最初のテーブルには、エントリへの参照(entry_id)と関連付けられた変更(mod_id)、および参照する変更のカテゴリ(mod_name)が含まれています。

表1:exp_store_product_options

mod_id      entry_id        mod_name
3           2919            COLOR
4           2311            SIZE
5           2311            COLOR
6           3301            COLOR

2番目のテーブルには、mod_idとopt_nameの2つの関連フィールドが含まれています

表2:exp_store_product_modifiers

mod_id      opt_name
3           BLACK
4           EU 44
5           BROWN
6           BROWN

私が達成しようとしているのは、(mod_idの結合を介して)一括で渡したいentry_idsに対応するすべてのDISTINCTopt_nameフィールドのリストです。

これが私がこれまでに思いついたコードです。各エントリIDのクエリをループする必要があり、反復ごとにすべてが異なるため、DISTINCT要件に失敗する以外に、必要なことを実行できると思います。 。({sale_products}タグはExpressionEngineからのものであり、解析中にループして、このページに関連するentry_idの結果のリストを提供します。

SELECT DISTINCT opt_name
FROM exp_store_product_options
INNER JOIN exp_store_product_modifiers
ON exp_store_product_options.product_mod_id=exp_store_product_modifiers.product_mod_id
{sale_products parse='inward'}entry_id = '{entry_id}' OR{/sale_products}
AND mod_name = 'SIZE'

================================================== ==

死後

他の誰かがExpressionEngine用のexpressoのStoreモジュール内で作業しようとしていて、テンプレートに基本的なフィルタリングを組み込む必要がある場合に備えて、最終的に機能するようになったコードを次に示します。ベンのコードと非常に似ていますが、解析順序の問題のため、entry_idsを直接挿入する代わりに埋め込みを利用します。

テンプレート:embeds / product_filter

{exp:query sql="SELECT DISTINCT opt_name
FROM exp_store_product_modifiers
LEFT JOIN exp_store_product_options
ON exp_store_product_options.product_mod_id = exp_store_product_modifiers.product_mod_id
WHERE exp_store_product_modifiers.entry_id IN ({embed:entry_ids})
AND exp_store_product_modifiers.mod_name = '{embed:filter_on}'"
}

<li><a href="#">{opt_name}</a></li>
{/exp:query}

次のような{embed}を使用します

{embed="embeds/product_filter" entry_ids="{sale_products backspace='1'}{entry_id},{/sale_products}" filter_on="SIZE"}
4

1 に答える 1

6

エントリのリストがある場合は、を使用できますIN。また、のLEFT JOIN代わりにここを使用しますINNER JOIN

SELECT DISTINCT opt_name
FROM exp_store_product_options
LEFT JOIN exp_store_product_modifiers
  ON exp_store_product_options.product_mod_id = exp_store_product_modifiers.product_mod_id
WHERE exp_store_product_options.entry_id IN (1,2,3)
AND mod_name = 'SIZE'
于 2012-03-26T02:07:26.730 に答える