从另一个表php的值中排序值

时间:2012-04-14 06:57:58

标签: php mysql

我的第一篇帖子。

我正在尝试使用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排序

是否有人可以解决此问题。如果需要,我可以提供样本数据。

谢谢。

2 个答案:

答案 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