如何重写我的SQL查询,以便它以特定的格式返回值(使用mysql或php)?

前端之家收集整理的这篇文章主要介绍了如何重写我的SQL查询,以便它以特定的格式返回值(使用mysql或php)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个叫做数字的表:
number_id  |  number_name
   1            aaaa
   2            bbbb
   3            cccc
   4            dddd
   5            eeee
   6            ffff

(它只包含6个条目)

我还有一个叫做文本的表格:

text_id  |  start_time  |  number_id  |  text_content
   1        some date1  |     2       |    blabla1
   2        some date2  |     1       |    blabla2
   3        some date3  |     2       |    blabla3
   4        some date4  |     3       |    blabla4
   5        some date5  |     4       |    blabla5
   6        some date6  |     6       |    blabla6
  etc.

(它包含很多条目).

现在,当我正在进行这样的查询时:

SELECT
   * 
FROM
   (SELECT
      DATEDIFF(now(),start_time) AS days_ago,number_id,COUNT(text_id) AS num_texts 
   FROM
      TEXTS 
   WHERE
      start_time BETWEEN  DATE_SUB(NOW(),INTERVAL 100 DAY) AND NOW() 
   GROUP BY
      DATE(start_time),number_id) AS temp

它使用number_id返回每个地方过去100天每天的文本数量.结果如下:

当我将它编码为json时,我得到:

[{"days_ago":"19","number_id":"1","num_texts":"179"},{"days_ago":"19","number_id":"5","num_texts":"1"},{"days_ago":"18","num_texts":"61"},"number_id":"2","number_id":"6","num_texts":"3"},{"days_ago":"17","number_id":"3",{"days_ago":"8","num_texts":"2"},{"days_ago":"7","number_id":"4",

我想写一个不同的查询,或更改现有的查询.有没有办法编写一个查询,将以下列方式返回我的数据:

[{"days_ago": "7","number_id" : "1","num_texts" : "18","number_id" : "2","num_texts" : "12","number_id" : "3",...,"number_id" : "6","num_texts" : "1"},{"days_ago": "6",{"days_ago": "5",{"days_ago": "4",{"days_ago": "3",{"days_ago": "2",{"days_ago": "1","num_texts" : "1"}]

基本上每行应该有6个number_id的每一个的days_ago和值num_texts的信息.我需要限制此查询仅过去7天,所以我知道我可以在这里修改它:

BETWEEN DATE_SUB(NOW(),INTERVAL 100 DAY) AND NOW()

并将100改为7,但有可能以某种方式得到这种特定格式的其他信息吗?

哦还有一件事 – 我正在从PHP调用这个查询,所以如果它更容易在PHP中以某种方式解析它并返回作为json,这也是一个选项.

非常感谢任何提示家伙!

=========
编辑:

正如@AlexBlex指出的那样 – 我提出的json结构可能无效,因为有多次使用相同的键名.为了帮助您更好地理解我的问题 – http://thevectorlab.net/flatlab/morris.html这里是morris js图表的例子.我希望在该示例中将图表生成为名为Quarterly Apple iOS设备单元销售的图表.在水平线上我想要日期(几天前),在垂直线上我需要num_texts.我希望有6行,每行代表不同的number_id.

解决方法

假设您的号码具有永远不会改变的这6个固定值,则可以通过链接6个文本表副本(或创建6个视图)来实现.

但是如果你通过跟踪days_ago更改并添加新的JSON记录来在PHP中执行它可能会更加清晰.您还必须确保没有跳过number_id,并为任何跳过的num_texts添加零值.

另外,示例伪代码

$days_ago=0;
while ([read_records]) {
    if (record['days_ago']!=$days_ago {
        $days_ago!=0 [Close line]
        $days_ago=record['days_ago'];
        [Add new line]
        [Add days_ago field]  }
    [Add number_id and num_texts fields]
}
[Close line]

第二个编辑,视图解决方案:

如果view_1是我在下面描述的视图并且view_2是number_id 2的视图,你可以将它们链接如下:

SELECT view_1.days_ago,view_1.num_texts AS num_texts1,view_2.num_texts AS num_texts2
FROM view_1 INNER JOIN view_2 ON view_1.days_ago=view_2.days_ago

如果每个days_ago的所有number_id都有条目,则此willo只能正常工作,否则您将只需创建days_ago的视图并使用LEFT / RIGHT联接来加入number_id视图.

原文链接:https://www.f2er.com/mssql/74879.html

猜你在找的MsSQL相关文章