我的第一篇帖子。
我正在尝试使用products_categories表中的值对我的products表中显示的值进行排序。
我的产品表包含以下字段:
id | psku | pname | pdescription
我的products_categories表包含以下字段:
id | psku | subcategory | orderid
我正在建设的网站是一个小型网上商店,其中包含几个子类别。此时的设置允许我将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排序
是否有人可以解决此问题。如果需要,我可以提供样本数据。
谢谢。
答案 0 :(得分: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,你将无法自信地预测将在多个类别中为PSKU返回哪个子类别。如果每个产品在子类别表中都有一个条目,您可能希望将LEFT JOIN更改为INNER JOIN。
答案 1 :(得分:1)
我已经查看了您创建的sampledata.php文件。我正在努力弄清楚你想要做什么。你为什么要运行两个查询?当然,您可以通过单个查询获得相同的结果。
您的第一个查询将返回一个pskus列表,然后您将其传递到第二个查询 -
SELECT psku, subcategory
FROM products_subcategories
WHERE subcategory = 'cosmetics'
+------+-------------+
| psku | subcategory |
+------+-------------+
| 6018 | cosmetics |
| 6017 | cosmetics |
| 6022 | cosmetics |
| 6025 | cosmetics |
+------+-------------+
第二个查询是 -
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
鉴于您只是从products表中检索字段,您可以这样做 -
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