【问题标题】:Custom Result Set自定义结果集
【发布时间】:2014-11-10 12:20:40
【问题描述】:

我不知道如何查询我的数据库以便它返回一个结果集,该结果集具有从给定查询中动态生成的列。下面是我要查询的表

+---------+------------+-------+
| user_id |    date    |  unit |
+---------+------------+-------+
|       1 | 2014-11-08 |   2   |
|       1 | 2014-11-08 |   5   |
|       1 | 2014-11-07 |   1   |
|       2 | 2014-11-07 |   2   |
|       1 | 2014-11-08 |   1   |
|       1 | 2014-11-07 |   2   |
+---------+----------=-+-------+

当日期介于 2 个日期之间且单位编号介于 2 个值之间时,我希望能够选择特定用户输入的所有单位。为此,查询将是:

SELECT `unit` 
FROM   `unit_table` 
WHERE  user_id = 1 
       AND (`date` BETWEEN '2014-11-05' AND '2014-11-08') 
       AND (`unit` BETWEEN 1 AND 5) 

但我希望结果集采用以下格式,其中 TRUE 和 FALSE 分别为 1 和 0

+------+------------+------------+------------+------------+
| unit | 2014-11-05 | 2014-11-06 | 2014-11-07 | 2014-11-08 |
+------+------------+------------+------------+------------+
|  1   |   FALSE    |   FALSE    |   TRUE     |   TRUE     |
|  2   |   FALSE    |   FALSE    |   TRUE     |   TRUE     |
|  3   |   FALSE    |   FALSE    |   FALSE    |   FALSE    |
|  4   |   FALSE    |   FALSE    |   FALSE    |   FALSE    |
|  5   |   FALSE    |   FALSE    |   FALSE    |   TRUE     |
+------+------------+------------+------------+------------+

这甚至可能吗,还是需要在结果集中在 php 中以编程方式完成?

如果无法提供有关如何设置数据库以允许这样做的任何建议,我们将不胜感激。注意:我想避免使用特定日期作为列,因为该表每天都会添加大量数据。

【问题讨论】:

  • 你正在寻找一个叫做pivoting的东西

标签: mysql select


【解决方案1】:

感谢 Rahul 让我走上了正轨!我最终实现了下面的查询,它给了我想要的东西。如果其他人有更好的答案,请随时在下面回答。

SELECT unit_number AS unit,
    SUM(IF(date=?,1,0)) AS day4,
    SUM(IF(date=?,1,0)) AS day3,
    SUM(IF(date=?,1,0)) AS day2,
    SUM(IF(date=?,1,0)) AS day1,
    SUM(IF(date=?,1,0)) AS day0
FROM `table_name`
WHERE user_id = 1 AND (unit BETWEEN 1 AND 5)
GROUP BY unit

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2010-12-27
    • 2021-05-17
    • 2015-10-03
    相关资源
    最近更新 更多