php - 有没有办法在 MySQL 结果集中生成 "fake"行?

标签 php mysql sql

我需要这个来制作图表。基本上我必须:

  1. 按日期选择所有发送的 SMS,不带时间部分,得到一个数组,其中包含每天的日期/计数对;
  2. 为我的表中没有任何记录的日子添加“假”行,即用零填充所有日期“空白”。

示例结果和相应的表格(此处简化)为:

array(
    '2012-05-26 00:00:00' => 1,
    '2012-05-27 00:00:00' => 0, // Fake added row
    '2012-05-28 00:00:00' => 2,
)

+----------------+----------------------+
| Table SMS | id | sent_at              |
+----------------+----------------------+
|           |  1 | 2012-05-26 21:58:41  |
+----------------+----------------------+
|           |  2 | 2012-05-28 22:19:21  |
+----------------+----------------------+
|           |  3 | 2012-05-28 02:19:21  |
+----------------+----------------------+

是否有执行此操作的任何 SQL 命令,或者我应该手动使用 PHP 数组?

最佳答案

您可以使用 UNION 语句

SELECT 
   sent_at,
   Count(*)
FROM (Select
        id,
        DATE(sent_at) as sent_at
      FROM TableName 
      Group by Date(sent_at)
      UNION ALL
      Select
        '0' as id,
        DATE('2012-05-27') as sent_at) derived_table
Group By sent_at

已编辑

我建议创建一个特殊的表来加入。

创建用于查询的日期表

CREATE TABLE DateTable (
  DateValue DateTime,
  Year Int,
  Month Int,
  Day Int)

现在用您正在查询的范围内的所有日期值填充此表。您可以使用任何有效日期轻松加入此表。允许您汇总存在和不存在的日期。

关于php - 有没有办法在 MySQL 结果集中生成 "fake"行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791698/

相关文章:

php - 限制对我服务器上的 php 脚本的访问

php - cURL 返回垃圾数据

javascript - PHP ajax 搜索结果弄乱了我的页面

mysql - 为什么我的索引字段以随机顺序而不是字母 (ASC) 顺序返回?

php - 使用 php preg_replace_callback - 但替换整个字符串而不是每个子字符串

php - 如何用 while 循环绘制并填充表格?

php - 是的,另一个 ON DUPLICATE KEY UPDATE 查询

php - 如何将日期字符串转换为我的日期时间格式?

sql - Oracle 将列显示为行

sql - 如何改变递增的数字序列?