简体   繁体   English

如何从数据库获取上周和上个月的注册用户

[英]How to get last week & last month registered users from db

I have a table where i have users registration date column I am trying to get last week & last month registered users but don't know how it will work.Here are the other queries which works: 我有一个表,其中有用户注册日期列,我试图获取上周和上个月的注册用户,但不知道它将如何工作。以下是其他有效的查询:

$users_today = $db_con->query("SELECT COUNT(*) as reg_date FROM users WHERE DATE(reg_date) = CURDATE()")->fetchColumn();
$users_yesterday = $db_con->query("SELECT COUNT(*) as reg_date FROM users WHERE reg_date=SUBDATE(CURDATE(), 1)")->fetchColumn();
$users_this_week = $db_con->query("SELECT COUNT(*) as reg_date FROM users WHERE WEEK(reg_date) = WEEK(CURRENT_DATE())")->fetchColumn();
$users_month = $db_con->query("SELECT COUNT(*) as reg_date FROM users WHERE MONTH(reg_date) = MONTH(CURRENT_DATE())")->fetchColumn();
$users_year = $db_con->query("SELECT COUNT(*) as reg_date FROM users WHERE YEAR(reg_date) = YEAR(CURRENT_DATE())")->fetchColumn();
$users_total = $db_con->query('SELECT COUNT(*) FROM users')->fetchColumn(); 

The week starts on Monday. 一周从星期一开始。 And Please Let me know are these queries safe to work with (avoid SQL Vulnerability) or any other better suggestions to make these safe. 并且请让我知道这些查询是否可以安全使用(避免SQL漏洞),或者是否有其他更好的建议可以确保这些安全。

If you define last week as being the most recent 7 days before today: 如果您将last week定义为今天之前的最近7天:

$users_last_week = $db_con->query("SELECT COUNT(*) as reg_date 
  FROM users 
  WHERE reg_date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
  AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)")->fetchColumn();

If you define last week as being the most recent 7 days which start on Monday and end on Sunday and any of them is before today: 如果您将last week定义为最近的7天(从星期一开始到星期日结束),并且其中有任何一天在今天之前:

$users_last_week = $db_con->query("SELECT COUNT(*) as reg_date 
  FROM users 
  WHERE reg_date BETWEEN SUBDATE(CURRENT_DATE(), INTERVAL 7 + WEEKDAY(CURRENT_DATE()) DAY)
  AND SUBDATE(CURRENT_DATE(), INTERVAL 1+WEEKDAY(CURRENT_DATE()) DAY)")->fetchColumn();

If you define last month as being the most recent 30 days before today: 如果您将last month定义为今天之前的最近30天:

$users_last_month = $db_con->query("SELECT COUNT(*) as reg_date 
  FROM users 
  WHERE reg_date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
  AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)")->fetchColumn();

If you define last month as being the calendar month which is before the current month: 如果您将last month定义为当前月份之前的日历月份:

$users_last_month = $db_con->query("SELECT COUNT(*) as reg_date 
  FROM users 
  WHERE reg_date BETWEEN DATE_SUB(DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE())-1 DAY), INTERVAL 1 MONTH)
  AND DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE()) DAY)")->fetchColumn();

UPDATE 更新

Regarding remarks for wrong results - removed 1 day from the right bound for LAST WEEK and added 1 day to the left bound for LAST MONTH. 关于错误结果的备注-从LAST WEEK的右边界删除1天,并在LAST MONTH的左边界增加1天。

UPDATE 2 更新2

To get the registrations for current week only: 仅获取当前一周的注册:

$users_this_week = $db_con->query("SELECT COUNT(*) as reg_date 
  FROM users 
  WHERE reg_date BETWEEN SUBDATE(CURRENT_DATE(), INTERVAL WEEKDAY(CURRENT_DATE()) DAY)
  AND CURRENT_DATE()")->fetchColumn();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM