【问题标题】:PHP/MYSQL counting the most ordered productPHP/MYSQL 统计订购最多的产品
【发布时间】:2017-05-08 00:57:51
【问题描述】:

用户表:

Order_items 表:

订单表:

$sql[2] = "SELECT p.p_name, o.created, COUNT(oi.id) AS db FROM products AS p
           INNER JOIN order_items AS oi ON oi.product_id = p.id
           INNER JOIN orders AS o ON o.id = oi.order_id
           GROUP BY p.p_name
           ORDER BY db DESC, o.created DESC
           LIMIT 1";

$result3= mysqli_query($conn,$sql[2]) or die(mysqli_error());
if (mysqli_num_rows($result3)>0)
{
    while ($record = mysqli_fetch_array($result3))
    {
        echo $record['p_name']." - ".$record['db']." - ".$record['created']."<br/>";
    }
}

我想计算订购次数最多的产品名称、售出多少产品以及订购该产品的最后日期。在这种情况下,结果如下所示: Barack - 4 - 2016-12-15 09:36:21 但我的 SELECT 只计算 3。有什么想法可以解决吗?

【问题讨论】:

  • 离题,您使用 GROUP BY 错误。 o.created 是每个值,因为它没有在 GROUP BY 语句中命名.. 并从您的表中创建一个 sql 转储并在此处(或在 sqlfiddle.com 上)发布它而不是图像

标签: php mysql database select count


【解决方案1】:

试试这个:

SELECT 
    p.p_name,
    MAX(o.created) AS created,
    COUNT(oi.id) AS db
FROM order_items AS oi
LEFT JOIN orders AS o ON oi.order_id= o.id
INNER JOIN products AS p ON p.id = oi.product_id 
GROUP BY oi.product_id
ORDER BY COUNT(oi.id) DESC
LIMIT 1

更新:
因为在你的表Orders 中没有order_id = 3,所以INNER JOIN 会给你3,如果你想得到4,使用LEFT JOIN

【讨论】:

  • 同样的结果,得到了 3 中的 4
  • @FaragoRoland 您的表中没有order_id = 3 order。如果你想得到 4,那么使用LEFT JOIN,我已经更新了我的答案。
  • 谢谢,现在分叉很好:)
猜你喜欢
  • 2021-10-16
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多