【问题标题】:Merge SQL database values when items have same value in specified column当项目在指定列中具有相同值时合并 SQL 数据库值
【发布时间】:2013-06-23 17:50:30
【问题描述】:

我知道如何以一种不优雅、不实用的方式解决这个问题,这意味着为共享的指定列中的每个值一个一个地发送请求,然后处理来自该特定输出的所有数据,然后执行对于另一个值等也是如此。但我想知道是否有人想到了一种优雅实用的方式,这意味着所有这些都由一个 PHP 函数处理。

基本上,我有这张桌子:

  location  |   title   | description | quantity 
============|===========|=============|==========
  shelf     |   apple   |    red      |    2
  drawer    |   banana  |    yellow   |    4
  shelf     |   kiwi    |    green    |    2
  cupboard  |   lemon   |    yellow   |    1
  fridge    |   melon   |    orange   |    3
  drawer    |   peach   |    orange   |    1

我最终想要的是创建一个 jQuery 饼图,告诉我每个 locationtitle 的百分比。但在此之前我需要一个输出shelf => 4(2+2)、drawer => 5(4+1)等的函数。

那么,问题是,有没有一种优雅实用的方法来实现这一点?意思是,检索所有行,但按位置将所有数据组合在一起,然后将每个位置的数量相加,以便稍后转换为饼图的百分比?

谢谢!

【问题讨论】:

    标签: php sql database charts group-by


    【解决方案1】:
    select location, sum (quantity) as sum_quantity from table group by location;
    

    后来使用$rows作为上述查询的结果,

    function prepareForChart ($rows) {
    
      $ret = array();
      $total = 0;
      foreach ($rows as $el) $total += $el["sum_quantity"];
    
      foreach ($rows as $el) {
        $ret[] = array(
          $el["location"] => $el["sum_quantity"],
          "percentage"    => 100 * $el["sum_quantity"]/$total,
        );
      }
    
      return $ret;
    }
    

    【讨论】:

    • 嘿!你甚至使用转换成百分比功能完成了我的工作!谢谢!无论如何,SELECT 字符串输出是什么?因为我通过数组构建函数来处理我的查询;但是,在这种情况下,我遇到了麻烦的 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given... 错误。
    • @QuestionerNo27 查询返回具有每个位置总数量的唯一位置,因此只有两列。
    【解决方案2】:

    这应该可以工作

    SELECT location, SUM(quantity) as total_quantity
    FROM table 
    GROUP BY location
    

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2020-04-03
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多