首页 文章

在sql中对组计数产品ID

提问于
浏览
0

我对sql相当新,所以我很抱歉,如果这是一个不成熟的问题,但我已经绞尽脑汁一段时间,并搜索谷歌没有答案,所以这是我的最后的手段 .

我一直试图在我的个人网站上制作一个畅销的页面,销售最近30天的畅销商品 .

在数据库中有2个表格:产品和产品订单

该产品如何总销售额,所有时间的审查数和其他相关信息,但产品订单有产品销售日期 .

因此,我认为产品唯一有用的方式是 Headers ,图像和价格 .

所以我现在查看产品订单,它有产品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(“now - 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服务器版本对应的手册,以便在'15:14:13 AND product_order.status = 2 AND product.status = 1 GROUP BY product_o'第4行附近使用正确的语法堆栈跟踪:

这是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;

2 回答

  • -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;
    

    更多关于group by http://www.w3schools.com/sql/sql_groupby.asp

  • 1
    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;
    

相关问题