2013-03-06 2 views
0

Я хочу сделать отчет, который можно просмотреть еженедельно, ежемесячно и ежегодно.MYSQL: Еженедельный, ежемесячный и годовой отчет

например: Я хочу посмотреть, кто поступил в неделю, или я хочу узнать, кто зачислен в этот месяц или год, а также о платежах. Я хочу, чтобы записаться в этот июнь. Я хочу видеть регистратора в 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

+0

Почему бы не использовать 'CURDATE()' вместо '$ datetoday'? Если 'payments.entrydate' является типом' date', нет необходимости использовать 'DATE_FORMAT' – Kermit

+0

@AarolamaBluenk, для вас я попробую это. –

ответ

5

Посмотрите на the manual относительно допустимых единиц измерения для INTERVAL. Вы можете просто использовать переключатель, чтобы определить диапазон для ваших записей.

В вашей папке вы будете иметь неделю, месяц или год. Затем вы можете использовать переключатель для подготовки вашего заявления.

$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://stackoverflow.com/questions/23083549/order-query-according-to-clause – NullPointer

Смежные вопросы