use*_*930 6 php mysql sql json
我有一张名为number:
number_id | number_name
1 aaaa
2 bbbb
3 cccc
4 dddd
5 eeee
6 ffff
Run Code Online (Sandbox Code Playgroud)
(它只包含6个条目)
我还有一张名为texts:
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.
Run Code Online (Sandbox Code Playgroud)
(它包含很多条目).
现在,当我正在进行这样的查询时:
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
Run Code Online (Sandbox Code Playgroud)
它使用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","number_id":"1","num_texts":"61"},
{"days_ago":"18","number_id":"2","num_texts":"1"},
{"days_ago":"18","number_id":"5","num_texts":"1"},
{"days_ago":"18","number_id":"6","num_texts":"3"},
{"days_ago":"17","number_id":"3","num_texts":"1"},
{"days_ago":"8","number_id":"1","num_texts":"2"},
{"days_ago":"8","number_id":"2","num_texts":"2"},
{"days_ago":"7","number_id":"4","num_texts":"1"},
Run Code Online (Sandbox Code Playgroud)
我想写一个不同的查询,或更改现有的查询.有没有办法编写一个查询,将以下列方式返回我的数据:
[{"days_ago": "7", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "6", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "5", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "4", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "3", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "2", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"},
{"days_ago": "1", "number_id" : "1", "num_texts" : "18", "number_id" : "2", "num_texts" : "12", "number_id" : "3", "num_texts" : "12" , ... , "number_id" : "6", "num_texts" : "1"}]
Run Code Online (Sandbox Code Playgroud)
基本上每行应该有6个中每个的信息days_ago和值.我需要限制此查询仅过去7天,所以我知道我可以在这里修改它:num_textsnumber_id
BETWEEN DATE_SUB(NOW(), INTERVAL 100 DAY) AND NOW()
Run Code Online (Sandbox Code Playgroud)
并将100改为7,但有可能以某种方式得到这种特定格式的其他信息吗?
哦还有一件事 - 我正在从php调用这个查询,所以如果它更容易在php中以某种方式解析它并返回作为json,这也是一个选项.
非常感谢任何提示家伙!
=========编辑:
正如@AlexBlex指出的那样 - 我提出的json结构可能无效,因为有多次使用相同的键名.为了帮助您更好地理解我的问题 - http://thevectorlab.net/flatlab/morris.html这里是morris js图表的例子.我希望将该图表生成Quarterly Apple iOS device unit sales为该示例中调用的图表.在水平线上我想要date(days ago),在垂直线上我需要num_texts.我希望有6行,每行代表不同的number_id.
假设您number有6个固定值永远不会改变,可以通过链接texts表的6个副本(或创建6个视图).
但是如果你通过跟踪days_ago更改和添加新的JSON记录来在php中执行它可能会更加清晰.您还必须确保number_id跳过no 并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]
Run Code Online (Sandbox Code Playgroud)
第二个编辑,视图解决方案:
如果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
Run Code Online (Sandbox Code Playgroud)
如果你number_id为每个人都有条目,那么这个willo只能正常工作days_ago,否则你将不得不创建一个只有的视图,days_ago并使用LEFT/RIGHT连接来加入number_id视图.
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |