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

标签 php mysql linechart

我正在尝试对两个表进行 LEFT JOIN(在 mysql/php 中)以创建用于 Google 折线图的 JSON 表。但出于某种原因,尽管当我在 phpadmin 中直接测试相同的 sql 时,我得到了正确的输出,但 sql 没有填充 json 表中的数据。

我有 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 1
2019-07-09  5 NULL
2019-07-03  2 NULL
2019-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 查询似乎正在工作......非常感谢任何解决这个问题的帮助......

最佳答案

当你有这样的查询时

SELECT 
  anxiety.date,
  anxiety.rating,
  fatigue.rating
...

然后您使用 PDO::FETCH_ASSOC 获取数据- 这些值存储在关联数组中,该数组由不带表前缀的列名索引。所以你必须使用 $row["date"] 访问它们而不是 $row["anxiety.date"] .但是anxiety.ratingfatigue.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"] .

关于php - 如何为 Google 多折线图(php、mysql)做 mysql LEFT JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57537435/

相关文章:

javascript - Google Visualization Charts API - 更改折线图上资源管理器功能的突出显示颜色

linechart - MPAndroidChart:带有三次贝塞尔曲线的 LineChart 显示错误(尖峰和循环)

php - 如何在(html 表的)底部显示 MySQL 数据库中的 "null"值?

mysql - mysql中3个表之间的关系

javascript - 动画不适用于多线图表 D3 v4

php - Mysql 从连接中检索特定数量的分组行

python - 大查询 : Create table if not exist and load data using Python and Apache AirFlow

php - 在 WooCommerce 中为特定产品从购物车中隐藏 "remove item"

javascript - 发送不带 "?"的 GET 变量

javascript - 如何在 javascript 中获取 Google DataTable 的最后一行?