MYSQL:每周,每月和每年的报告

MYSQL:每周,每月和每年的报告

问题描述:

我想制作可按周,按月和按年查看的报告。MYSQL:每周,每月和每年的报告

例如: 我想查看谁按每周注册人数,或者我想查看谁在本月或年份注册的人员以及付款。我想看看这个6月份的参与者。我想通过使用下拉搜索来查看2010年的参与者。

//这是我的每周报告的代码,我想看看上周注册的学生,但我知道我的代码是否正确。

$datetoday=date("Y-m-d"); 
$result = mysql_query(" 
    SELECT enrollee_info.*, payments.* from enrollee_info 
INNER JOIN payments on payments.enrollee_id=enrollee_info.e_id 
     WHERE enrollee_info.category='Walk In' 
     AND DATE_FORMAT(payments.entrydate , %Y-%m-d')>=SUBDATE('".$datetoday."' , INTERVAL 7 DAY)"); 

与每月和每年的,比如我想看到谁入选本月等等,我希望看到通过使用下拉菜单,你可以选择一个月或者你想搜索和今年录取谁。

+1

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并且被正式弃用](http://j.mp/XqV7Lp)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。 – Kermit 2013-03-06 00:58:21

+0

为什么不使用'CURDATE()'而不是'$ datetoday'?如果'payments.entrydate'是'date'类型,那么不需要使用'DATE_FORMAT' – Kermit 2013-03-06 00:59:16

+0

@AarolamaBluenk,因为我会尝试。 – 2013-03-06 01:01:22

关于INTERVAL的可接受单位,请看the manual。您可以简单地使用开关来确定记录的范围。

在你的下拉菜单中,你将有周,月或年。然后你可以使用开关来准备你的陈述。

$sql = "SELECT enrollee_info.*, 
    payments.* 
FROM enrollee_info 
     INNER JOIN payments 
       ON payments.enrollee_id = enrollee_info.e_id 
WHERE enrollee_info.category = 'Walk In' 
     AND payments.entrydate >= Subdate(Curdate(), "; 

switch ($range) { 
    case "month": 
     $sql .= 'INTERVAL 1 MONTH'; 
     break; 
    case "year": 
     $sql .= 'INTERVAL 1 YEAR'; 
     break; 
    //if no match, use week 
    default: 
     $sql .= 'INTERVAL 1 WEEK'; 
} 

$sql .= ')'; 

这将创建一个这样的语句:

SELECT enrollee_info.*, 
     payments.* 
FROM enrollee_info 
     INNER JOIN payments 
       ON payments.enrollee_id = enrollee_info.e_id 
WHERE enrollee_info.category = 'Walk In' 
     AND payments.entrydate >= Subdate(Curdate(), INTERVAL 1 week) 

如果可能的话,尽量避免从每个表中读取所有的列和使用列的列表。

+1

你能帮我在这个主题http://*.com/questions/23083549/order-query-according-to-clauses – NullPointer 2014-04-15 15:21:57