gpt4 book ai didi

MySQL 生成每日配置文件 View 报告并填补空白

转载 作者:行者123 更新时间:2023-11-29 11:39:48 25 4
gpt4 key购买 nike

我将在 Chart.js 中绘制每日个人资料 View 。我有两个表,一个用于跟踪每天的个人资料访问,名为“stats_profile_views”,第二个表包含名为“calendar”的一年中的所有日期 enter image description here我想显示登录每个供应商时最近 7 天的个人资料 View 。

尝试了以下查询,

SELECT datefield  AS DATE ,`id`, `vendor_id`, `view_date`,IFNULL(view_count,0) AS view_count
FROM (`stats_profile_views` pv)
RIGHT JOIN bp_calendar ON (DATE(view_date) = bp_calendar.datefield)
WHERE `vendor_id` = '110'
AND bp_calendar.datefield BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()

GROUP BY DATE
ORDER BY `view_date` asc

我喜欢获取过去 7 天的记录,其中 view_count 为零,以表示“stats_profile_views”表中的不可用记录。但是当应用 WHERE vendor_id = '110' 时,它无法返回此类记录,并且仅给出与 vendor_id = '110' 相关的 3 条记录。但它在没有vendor_id过滤器的情况下工作得很好。

当使用vendor_id进行过滤时,如何获得最近7天的记录,其中view_count填充为零。请任何人指导我找到解决方案。

最佳答案

SELECT
c.datefield AS DATE
, pv.id
, pv.vendor_id
, pv.view_date
, IFNULL(pv.view_count, 0) AS view_count
FROM bp_calendar c
LEFT JOIN stats_profile_views pv ON (DATE(pv.view_date) = c.datefield)
AND pv.vendor_id = '110'
WHERE c.datefield BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()
ORDER BY
pv.view_date ASC

使用外连接时,where 子句必须小心,不要覆盖不匹配的行,否则您会得到内连接的效果。这就是您最初的查询中发生的情况;因为每一行都需要有一个vendor_id = '110',但不匹配的日期不能有任何vendor_id。

此外,它通常有助于编写查询 FROM(包含所有行的表)LEFT JOIN(其中包含间隙的表)。然后包含左连接表的额外条件作为额外连接条件,而不是 where 子句。

如果您想对结果进行分组,那么您需要指出您正在尝试执行的操作。也许对 view_counts 求和?但是,如果您打算这样做,那么您就不会在结果中包含像 id 这样的列。

此外,请在对列的每个引用中包含表别名。

关于MySQL 生成每日配置文件 View 报告并填补空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com