【发布时间】:2015-10-31 17:36:15
【问题描述】:
我有一个关于使用 MySQL 查询将我的数据转换为 JSON 对象的问题。我的查询正在转换为 JSON 对象,但它没有按我想要的方式工作。
我的数据库中有多个表,我想在图表上绘制图表,使用日期作为 X 轴,值作为 Y 轴。我目前正在按日期加入表格。但是,有些表格每天可能有多个提交,而其他表格可能没有。目前,我的查询仅显示数据提交到所有 4 个表的日期的结果。
我还想以 0-10 的比例绘制信息。 4 个表中的三个只有 0-10 的值,所以我每天取每个值的平均值。包含 nf_sugars 和 nf_total_carbohydrates 的营养表有更大的数字,我将使用标准化将它们转换为 0-10 的比例。目前,我只是尝试获取每天的 SUM,并在这部分工作后完成其余的计算。但是,我当前正在运行的查询给我的结果远高于我数据库中实际数字的总和。
任何帮助将不胜感激!这是我目前用来创建 JSON 对象的 PHP。作为旁注,我确实成功连接到我的数据库,我只是没有在此处包含它。
$myquery = "SELECT track_ticseverity.date,
AVG(track_ticseverity.ticnum) as average_ticnum,
track_fatigue.date,
AVG(track_fatigue.fatiguenum) as average_fatiguenum,
track_stress.date,
AVG(track_stress.stressnum) as average_stressnum,
track_nutrition.date,
((SUM(track_nutrition.nf_sugars) ) ) as sum_nf_sugars,
((SUM(track_nutrition.nf_total_carbohydrate) ) ) as sum_nf_total_carbohydrate
FROM track_ticseverity
INNER JOIN track_fatigue
ON track_ticseverity.date=track_fatigue.date
INNER JOIN track_stress
ON track_fatigue.date=track_stress.date
INNER JOIN track_nutrition
ON track_stress.date=track_nutrition.date
WHERE track_ticseverity.user_id=1
AND track_fatigue.user_id=1
AND track_stress.user_id=1
AND track_nutrition.user_id=1
GROUP BY track_ticseverity.date";
$query = mysqli_query($conn, $myquery);
if ( ! $query ) {
echo mysqli_error(s);
die;
}
$data = array();
for ($x = 0; $x < mysqli_num_rows($query); $x++) {
$data[] = mysqli_fetch_assoc($query);
}
echo json_encode($data);
mysqli_close($conn);
EDIT - 查询成功返回一个 JSON 对象。我的问题是我写的查询没有以正确的方式输出数据。我需要查询来从多个表中选择信息,其中一些每天提交多次,而另一些则只提交一次或没有提交。
EDIT2 - 我正在考虑另一种处理方法是将多个 SELECT 语句组合成一个 JSON 对象,但我不确定如何执行此操作。
【问题讨论】:
-
您的查询是否成功返回数据?有什么问题?输出是什么,解释清楚。您使用的标头是什么?
-
是的,查询成功返回数据。问题是它只返回所有四个表都有信息的日期的数据,而不是显示所有日期的数据,即使一个表必须有数据。它还输出 nf_sugars 和 nf_total_carbohydrate 的总和,该总和高于我数据库中数字的实际总和。我不确定这是否与我根据日期加入表格这一事实有关,即使有些表格每天有多次提交而其他表格没有。
-
在原始 SQL 上检查您的查询,看看它是否正确,在命令行或 PHPMyAdmin 或类似的东西上检查它。您说它只返回“日期数据”,这意味着它没有正确返回。