我正在尝试对两个表进行 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.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"]
.
关于php - 如何为 Google 多折线图(php、mysql)做 mysql LEFT JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57537435/