【问题标题】:PHP SQL: GROUP BY as array indexPHP SQL:GROUP BY 作为数组索引
【发布时间】:2014-04-29 21:21:00
【问题描述】:

我对 mysql 有这个查询:

SELECT HOUR(time),COUNT(*) FROM pageview WHERE time >= DATE_SUB(NOW(),INTERVAL 12 HOUR) GROUP BY HOUR(time)

例如,这是输出:

Array
(
    [0] => Array
        (
            [HOUR(time)] => 1
            [COUNT(*)] => 1
        )

    [1] => Array
        (
            [HOUR(time)] => 10
            [COUNT(*)] => 4
        )

    [2] => Array
        (
            [HOUR(time)] => 11
            [COUNT(*)] => 5
        )

)

但是我想要这样的输出

Array
(
    [1] => 1
    [10] => 4
    [11] => 5
)

数组索引应该是[HOUR(time)] 的值。 我宁愿直接通过更改查询。

我用这个来获取数据:

$stmt = $db->prepare($query);
$result = $stmt->execute();
$views = $stmt->fetchAll(); 

【问题讨论】:

  • 如何获取数据?给定一个数组,您可能能够转换为您想要的模式。只有 MySQL 你不能。
  • @fedorqui 我在问题中添加了获取数据的方式。 @haseeb 这不起作用

标签: php mysql sql arrays multidimensional-array


【解决方案1】:

mysql 结果中的索引会自动创建,以实现您的目标循环通过您的第一个数组并根据需要创建新的数组

$result = array();
foreach($views as $row) {
    $result[$row['HOUR(time)']] =  array( 'COUNT(*)' =>  $row['COUNT(*)']);
}
print_r($result); // check output

或更简单的形式

$result = array();
foreach($views as $row) {
    $result[$row['HOUR(time)']] =  $row['COUNT(*)'];
}
print_r($result); // check output

【讨论】:

  • 所以考虑接受答案或投票:) @user3449482
  • 好的,我会的。另一个问题:我想显示用逗号分隔的数组的值(从 1 到 12)。我怎样才能让这更简单?而不是:echo $result[0].', '.$result[1].', '.$result[2].', '.$result[3].', '.$result[4].', '.$result[5]?我可以以某种方式将它转换为这样的字符串而不是数组吗?
  • 使用implode() 像这样echo implode(', ', $result);php.net 上查看文档
  • 这会跳过空数组。我想将结果 $result[0] 显示到 $result[12] 并在未定义时显示“0”。
  • 所以写foreach并检查项目,如果为空打印0
【解决方案2】:

试试这个

$res = array();
foreach($views as $data)
{
 $res[$data['HOUR(time)']] =  array( 'COUNT(*)' =>  $data['COUNT(*)']);
}
print_r($res);

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 2021-12-25
    • 1970-01-01
    • 2023-02-08
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多