0

ここに私の最初の投稿。

products テーブルから表示された値を、products_categories テーブル内の値で並べ替えようとしています。

私の製品テーブルには、次のフィールドが含まれています。

id | psku | pname | pdescription

私の products_categories テーブルには次のフィールドがあります。

id | psku | subcategory | orderid

私が構築しているサイトは、いくつかのサブカテゴリを含む小さな e ショップです。今回の設定では、1 つの製品を複数のカテゴリに追加できます。

たとえば、製品 sku# 6001 は、化粧品とまつげの 2 つのサブカテゴリにリストされます。次のように、products_subcategories テーブルに 2 つのエントリがあります。

id | psku | subcategory | orderid
1 | 6001 | cosmetics | 1
2 | 6004 | eyelashes | 1
3 | 6003 | cosmetics | 2
4 | 6011 | cosmetics | 3
5 | 6020 | eyelashes | 2
6 | 6045 | cosmetics | 4

現在、次のクエリを使用して各サブカテゴリのデータを表示しています。

SELECT * FROM products LEFT JOIN products_subcategories 
ON products.psku = products_subcategories.psku 
WHERE products.psku IN ('6001','6003','6011','6020','6045') 
GROUP BY e2o_products_subcategories.psku 
ORDER BY e2o_products_subcategories.orderid ASC

これにより、結果が次のように表示されます。

Cosmetics:
PSKU 6001
PSKU 6003
PSKU 6011
PSKU 6045

eyelashes:
PSKU 6004
PSKU 6020

うまくいかないようです。最悪の結果で、他のいくつかの組み合わせを試しました。商品は表示されますが、orderid で並べ替えられません

誰かがこの問題の可能な解決策を持っているでしょうか。必要に応じてサンプルデータを提供できます。

ありがとうございました。

4

2 に答える 2

1

あなたが作成したsampledata.phpファイルを見てきました。私はあなたがやろうとしていることを理解するのに苦労しています。なぜ2つのクエリを実行しているのですか?確かに、1つのクエリで同じ結果を得ることができます。

最初のクエリは、2番目のクエリに渡すpskusのリストを返します-

SELECT psku, subcategory
FROM products_subcategories
WHERE subcategory = 'cosmetics'

+------+-------------+
| psku | subcategory |
+------+-------------+
| 6018 |  cosmetics  |
| 6017 |  cosmetics  |
| 6022 |  cosmetics  |
| 6025 |  cosmetics  |
+------+-------------+

2番目のクエリは-

SELECT DISTINCT products.*
FROM e2o_products
INNER JOIN e2o_products_subcategories 
    ON e2o_products.psku = e2o_products_subcategories.psku 
WHERE e2o_products.pstatus =  '1' 
AND e2o_products.psku IN (6018,6017,6022,6025)
GROUP BY e2o_products.psku
ORDER BY e2o_products_subcategories.dsporder DESC

製品テーブルからフィールドを取得するだけであるとすると、次のことができます-

SELECT p.*
FROM products p
INNER JOIN products_subcategories ps
    ON p.psku = ps.psku 
WHERE p.pstatus = 1
AND ps.subcategory = '$subcat'
ORDER BY ps.dsporder DESC
于 2012-04-14T11:59:04.747 に答える
1

最初にサブカテゴリー名で注文する必要があるので、

SELECT * FROM products 
    LEFT JOIN products_subcategories 
    ON products.psku = products_subcategories.psku 
WHERE products.psku IN ('6001','6003','6011','6020','6045') 
ORDER BY e2o_products_subcategories.subcategory ASC,
         e2o_products_subcategories.orderid ASC

GROUP BY も削除したことに注意してください。これにより、各 PSKU が結果で 1 回だけ返され、複数のカテゴリの PSKU に対して返されるサブカテゴリを自信を持って予測することができなくなります。すべての製品が subcategories テーブルにエントリを持っている場合、おそらく LEFT JOIN を INNER JOIN に変更したいと思うでしょう。

于 2012-04-14T07:03:22.437 に答える