【问题标题】:Group count product ids in sqlsql中的组计数产品ID
【发布时间】:2013-11-22 04:06:33
【问题描述】:

我对 sql 还很陌生,所以如果这是一个令人讨厌的问题,我深表歉意,但我已经绞尽脑汁一段时间了,在谷歌上搜索没有答案,所以这是我最后的选择。

我一直在尝试在我的个人网站上创建一个最畅销的页面,该页面在过去 30 天内销售最畅销的商品。

数据库中有两个表:产品和产品订单

产品总销量、总销量等相关信息,但产品订单有产品销售日期。

所以在我看来,产品唯一的优点就是标题、图片和价格。

所以我现在查看产品订单,其中包含产品 ID 和销售日期。

所以我的问题是如何对 id 进行分组,

例如,如果我有:

productid = 42, datesold = 2013-11-08 21:11:10
productid = 11, datesold = 2013-11-08 21:09:10
productid = 42, datesold = 2013-11-08 21:06:10
productid = 2,  datesold = 2013-11-07 21:11:10
productid = 11, datesold = 2013-11-06 21:11:10

我将如何退回它,所以它基本上是这样说的

productid = 42 (sold 2 times)
productid = 11 (sold 2 times)
productid = 2 (sold 1 time)

这样的事情还能做到吗?

另外我认为我有显示它的左连接,但仍然无法获得组计数的逻辑

这是我的左连接逻辑,请记住它将是 pdo,这只是在我准备语句之前显示查询;)

$todaysdate = date('Y-m-d h:i:s', strtotime("现在 - 30 天前"));

SELECT * FROM product_order LEFT JOIN product ON product_order.productId=product.id
WHERE product_order.modifiedDate >= $todaysdate AND product_order.status = 2 
ORDER BY product_order.modifiedDate DESC;

提前感谢您提供的任何帮助:)

编辑::::::::::::::::::::::::::::::::::::

我已经更改了它,但由于某种原因它抛出了一个重大错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“15:14:13 AND product_order.status = 2 AND product.status = 1 GROUP BY product_o”附近使用正确的语法 堆栈跟踪:

这里是sql查询:

$todaysdate = date('Y-m-d G:i:s', strtotime("now - 30 days ago"));

SELECT product.id, product.name, product.picture, product.mainImage, product_option_detail.price, COUNT(product_order.productId) AS NumberOfOrders FROM product_order 
RIGHT JOIN product ON product_order.productId=product.id 
INNER JOIN product_option_detail ON product_order.productId=product_option_detail.productId 
WHERE product_order.modifiedDate >= {$createddate} AND product_order.status = 2 AND product.status = 1  
GROUP BY product_order.productId
ORDER BY NumberOfOrders DESC;

【问题讨论】:

  • 您使用的是哪个 DBMS?甲骨文? Postgres?
  • @a_horse_with_no_name 它的 MySQL
  • 请理解您的更新与您最初提出的问题完全不同。您可以使用静态值作为查询参数来验证您的查询是否正常工作。确认后,请将正确答案标记为已接受并发布问题。

标签: php mysql sql left-join


【解决方案1】:

使用GROUP BY 按产品的id 和名称对行进行分组,并使用count 聚合计算每个产品的订单数。

SELECT p.id, p.name, count(po.order_id) 
FROM product_order as po
LEFT JOIN product  as p ON po.productId = p.id
WHERE po.modifiedDate >= $todaysdate AND po.status = 2 
GROUP BY p.id,p.name
ORDER BY po.modifiedDate DESC;

更多关于http://www.w3schools.com/sql/sql_groupby.asp分组的信息

【讨论】:

    【解决方案2】:
    SELECT p.id, p.name, count(po.order_id) AS ProductSold 
    FROM product_order as po
    LEFT JOIN product  as p ON po.productId = p.id
    WHERE po.modifiedDate >= $todaysdate 
    GROUP BY p.id,p.name
    ORDER BY ProductSold DESC;
    

    【讨论】:

    • 如果您不提供任何其他信息,请不要发布相同的答案。
    猜你喜欢
    • 2018-12-29
    • 2021-01-24
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2013-10-16
    • 2017-01-03
    相关资源
    最近更新 更多