0

我在这里的第一篇文章。

我正在尝试使用 products_categories 表中的值对我的产品表中显示的值进行排序。

我的产品表包含以下字段:

id | psku | pname | pdescription

我的 products_categories 表有以下字段:

id | psku | subcategory | orderid

我正在构建的站点是一个小型 eshop,其中包含几个子类别。此时的设置允许我将 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

您需要先订购子类别名称,所以

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。

于 2012-04-14T07:03:22.437 回答
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
于 2012-04-14T11:59:04.747 回答