クエリが特定のバリエーション価格範囲内の製品セットを返すように、製品テーブルをクエリしようとしています。製品には多くのバリエーションがあり、バリエーションは製品に属しています。動作している次のクエリがありますが、非常に遅いです。クエリには 1.66 秒かかります。
SELECT colortags.tag, products.*, (SELECT variants.price FROM variants WHERE variants.product_id = products.product_id LIMIT 1) price, collects.position
FROM products
INNER JOIN wp_wps_collects collects
ON products.product_id = collects.product_id
AND collects.collection_id = 123456788
INNER JOIN wp_wps_tags colortags
ON colortags.product_id = collects.product_id
AND (colortags.tag = 'black' OR colortags.tag = 'nav')
INNER JOIN wp_wps_tags styletags
ON styletags.product_id = collects.product_id
AND (styletags.tag = 'purses')
WHERE (SELECT variants.price FROM variants WHERE variants.product_id = products.product_id AND variants.price >= 200 AND variants.price < 300 LIMIT 1) > 0
AND (SELECT variants.price FROM variants WHERE variants.product_id = products.product_id AND variants.price >= 200 AND variants.price < 300 LIMIT 1) <> 0
ステートメントでは、SELECT ステートメントでサブクエリによって作成されWHERE
た値をチェックしようとしましprice
たが、MYSQL はそれprice
が未定義であると教えてくれます。SQLは次のとおりです。
SELECT colortags.tag, products.*, (SELECT variants.price FROM wp_wps_variants variants WHERE variants.product_id = products.product_id LIMIT 1) price, collects.position
FROM wp_wps_products products
INNER JOIN wp_wps_collects collects
ON products.product_id = collects.product_id
AND collects.collection_id = 98515058801
INNER JOIN wp_wps_tags colortags
ON colortags.product_id = collects.product_id
AND (colortags.tag = 'color:generic-black' OR colortags.tag = 'color:navy')
INNER JOIN wp_wps_tags styletags
ON styletags.product_id = collects.product_id
AND (styletags.tag = 'style:totes')
WHERE price >= 200
AND price < 300
これは、すぐ上の SQL から得られるエラー メッセージです。
「where句」の不明な列「価格」
また、テーブルで一連の結合を使用しようとしましたvariants
が、重複した製品が返されます。これがSQLです
SELECT colortags.tag, products.*, (SELECT variants.price FROM variants WHERE variants.product_id = products.product_id LIMIT 1) price, collects.position
FROM products
INNER JOIN collects
ON products.product_id = collects.product_id
AND collects.collection_id = 1234566
INNER JOIN colortags
ON colortags.product_id = collects.product_id
AND (colortags.tag = 'black' OR colortags.tag = 'navy')
INNER JOIN styletags
ON styletags.product_id = collects.product_id
AND (styletags.tag = 'purses')
INNER JOIN variants
ON variants.product_id = products.product_id
AND variants.price >= 200
AND variants.price < 300
AND variants.price > 0
AND variants.price <> 0
私が望むのは、パフォーマンス ヒットなしで最初の SQL ステートメントから取得されたクエリ結果です。INNER JOIN
バリアント テーブルに を使用して SQL を記述し、重複した製品を取得せずに誤った価格のバリアントを除外できると考えたいのですが、その方法を特定できません。
ここに SQL を記述して、特定のバリエーションの価格範囲内の製品をクエリできるようにする方法を知っている人はいますか?