我正在查询一个 MYSQL 数据库,它有一个名为 PRICE 的表,其中包含以下字段:用户、价格日期、上午、下午。我正在获取当前用户当前一周的所有早盘价格,以用作 JS.Charts 折线图中的数组。我遇到的问题是可能缺少天数,因此我从查询创建的数组在图表中创建了日期间隔。
我创建了另一个名为日历的表,其中包含三个字段:日期字段、上午、下午。我用今年的日期 (YYYY-MM-DD) 以及上午和下午值的 0 填充它。
我现在一直在尝试编写一个 LEFT JOIN 查询来选择当前一周的所有早晨值,并将其与第二个表连接以用零填充日期间隙,但我无法让它工作。任何帮助将不胜感激。
查询:
$sql = "SELECT p.morning, c.morning
FROM price p
LEFT JOIN calendar c ON p.price_date = c.datefield
WHERE p.user = '$user' AND YEARWEEK(p.price_date) = YEARWEEK(NOW())
ORDER BY p.price_date";
正在使用的数据和输出的内容:
表价:
用户 | 价格日期 | 早上 | 下午 |
---|---|---|---|
辣椒 | 2021-03-15 | 23 | 35 |
辣椒 | 2021-03-17 | 43 | 52 |
辣椒 | 2021-03-18 | 24 | 35 |
辣椒 | 2021-03-19 | 78 | 85 |
表日历(部分 - 适用于全年)
日期字段 | 早上 | 下午 |
---|---|---|
2021-03-15 | 0 | 0 |
2021-03-16 | 0 | 0 |
2021-03-17 | 0 | 0 |
2021-03-18 | 0 | 0 |
2021-03-19 | 0 | 0 |
2021-03-20 | 0 | 0 |
2021-03-21 | 0 | 0 |
我需要查询返回本周(M 到 SUN)的早间价格,并为缺失的日期填充零:
数组应为:23,0,43,24,78,0,0
我上面的查询返回: ,0,0,0
为了制作我正在做的数组:
$result = mysqli_query($conn, $sql);
$morning = array();
while ($row = mysqli_fetch_assoc($result))
{
$morning[] = $row["morning"];
}
然后在图表中使用时:
<?php echo implode(", ", $morning); ?>
在 a 中LEFT JOIN
,包含所有应该在输出中的行的表应该是第一个。
如果其他表上有条件,则需要将它们放在ON
子句中。如果没有比赛c.datefield
,你会得到NULL
的p
列,并在测试他们WHERE
将这些行过滤掉。
日期应该从calendar
表格中过滤掉,而不是price
. 您应该返回日期,以便您知道行的用途。
为p.morning
and 指定别名,c.morning
以便在从结果中获取列时可以区分它们。
您应该按 中的列排序c
,因为p.price_date
将NULL
用于缺少的日期。
$sql = "SELECT c.datefield, IFNULL(p.morning, 0) AS price_morning, c.morning AS cal_morning
FROM calendar c
LEFT JOIN price p ON p.price_date = c.datefield
AND p.user = '$user'
WHERE YEARWEEK(c.datefield) = YEARWEEK(NOW())
ORDER BY c.datefield";
在一个不相关的说明中,您应该使用准备好的语句而不是将变量替换到 SQL 中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句