Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mysql中选择星期一到星期天?_Php_Sql_Mysqli_Pdo - Fatal编程技术网

Php 如何在mysql中选择星期一到星期天?

Php 如何在mysql中选择星期一到星期天?,php,sql,mysqli,pdo,Php,Sql,Mysqli,Pdo,我尝试选择查询的日期,但我也希望在sql的日期上获得例如星期天甚至没有星期天。星期天是零 这里是mysql SELECT DATE(log_date) DATE, COUNT(users) active_users, DATE_FORMAT(log_date,'%a') DAYNAME FROM tbl_accounts WHERE DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)

我尝试选择查询的日期,但我也希望在sql的日期上获得例如星期天甚至没有星期天。星期天是零

这里是mysql

SELECT
    DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE
    DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)
GROUP BY DATE(log_date);
我要做的是选择周一到周日,即使没有周日,我仍然要选择moday,如果为空,它将显示零值?可能吗

样本输出:


我希望此输出变为周一-周日,如果没有周日,周日将显示为零。

您的意思是这样吗

SELECT  t.DATE, IFNULL(t.active_users, 0) AS active_users, week.d 
FROM (
SELECT DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE DATE(log_date) BETWEEN DATE(NOW()) - INTERVAL 1 WEEK AND DATE(NOW())
GROUP BY DATE(log_date)) AS t
RIGHT OUTER JOIN (
    SELECT 'Sun' AS d
    UNION SELECT 'Mon' AS d
    UNION SELECT 'Tue' AS d
    UNION SELECT 'Wed' AS d
    UNION SELECT 'Thu' AS d
    UNION SELECT 'Fri' AS d
    UNION SELECT 'Sat' AS d
) AS week ON week.d = t.DAYNAME
MySQL中的示例结果如下图所示:

选择
日期(日志日期)日期,
统计(用户)活动用户数,
日期格式(日志日期,'%a')DAYNAME
来自tbl_账户
哪里
日期(:now)-间隔1周到日期(:now)之间的日期(日志日期),以及
DATENAME(dw,@date)‘星期一’
按日期分组(记录日期);
只需将其添加到clouse所在的位置即可将其排除<代码>日期名称(dw,@date)‘星期一’
这是内置函数MSSQL。

我认为示例数据和所需结果将非常有用。这里的一个选项是将日历表左键连接到当前查询。这将包括日历表中出现的任何日期。因此,我应该有日历表?因此,这很简单,您需要为一周中的每一天进行选择,并将其插入临时表,然后查询临时表。提供了示例输出
SELECT
    DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE
    DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)and
DATENAME(dw , @date) <> 'Monday'
GROUP BY DATE(log_date);