为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 Google 多折线图(php、mysql)做 mysql LEFT JOIN?

如何为 Google 多折线图(php、mysql)做 mysql LEFT JOIN?

PHP
慕后森 2021-11-26 17:46:11
我正在尝试对两个表进行 LEFT JOIN(在 mysql/php 中)以创建用于 Google 折线图的 JSON 表。但是由于某种原因,sql 没有在 json 表中填充数据,尽管当我直接在 phpadmin 中测试相同的 sql 时,我得到了正确的输出。我有 2 个表 - Anxiety 和 Fatigue - 并且连接是在用户 ID 和日期上进行的。两个表都有一个“评级”列,我正在尝试绘制该列,因此我试图将日期、焦虑.评级、疲劳.评级放入 json 表中..这是我正在使用的基本 php 代码:$stmt = $pdo->prepare("SELECT anxiety.date, anxiety.rating, fatigue.rating FROM anxiety LEFT JOIN fatigue ON (anxiety.userid = fatigue.userid) AND (anxiety.date = fatigue.date");$stmt->execute();// set the resulting array to associative$result = $stmt->fetchALL(PDO::FETCH_ASSOC);$rows = array();$table = array();$table['cols'] = array(array('label' => 'Date', 'type' => 'string'),array('label' => 'Anxiety rating', 'type' => 'number'),array('label' => 'Fatigue rating', 'type' => 'number'));/* Extract the information from $result */foreach($result as $row) {  $sub_array = array();  $sub_array[] =  array("v" => $row["anxiety.date"]);  $sub_array[] =  array("v" => (int) $row["anxiety.rating"]);  $sub_array[] =  array("v" => (int) $row["fatigue.rating"]);  $rows[] =  array("c" => $sub_array);          }$table['rows'] = $rows;// convert data into JSON format$jsontable = json_encode($table);echo $jsontable;如果我从 phpadmin 中运行 sql 查询,这就是我得到的结果:2019-07-14  4 12019-07-09  5 NULL2019-07-03  2 NULL2019-07-01  3 4这就是我得到的 JSONTable 输出(如您所见,这是不正确的):{"cols":[{"label":"Date","type":"string"},{"label":"Anxiety rating","type":"number"},{"label":"Fatigue rating","type":"number"}],"rows":[{"c":[{"v":null},{"v":0},{"v":0}]},{"c":[{"v":null},{"v":0},{"v":0}]},{"c":[{"v":null},{"v":0},{"v":0}]},{"c":[{"v":null},{"v":0},{"v":0}]}]}显然,我在将数据加载到 json 表中的方式上做错了,因为 sql 查询似乎正在工作......解决这个问题的任何帮助将不胜感激......
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

当您有类似的查询时


SELECT 

  anxiety.date,

  anxiety.rating,

  fatigue.rating

...

并使用以下方式获取数据PDO::FETCH_ASSOC- 值存储在由列名索引的关联数组中,没有表前缀。所以你必须使用$row["date"]而不是访问它们$row["anxiety.date"]。但是anxiety.rating和fatigue.rating以相同的列名返回,PHP/PDO 会将它们写在相同的索引 ( $row["rating"]) 下。这意味着, 的值anxiety.rating将被 的值覆盖fatigue.rating。为避免这种情况,您应该在查询中使用列别名。因此,将您的查询更改为


SELECT 

  anxiety.date,

  anxiety.rating as anxiety_rating,

  fatigue.rating as fatigue_rating

...

并访问与数据$row["date"],$row["anxiety_rating"]和$row["fatigue_rating"]。


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信