2017-12-12 20 views
-1

사용자가 보고서의 간격을 선택하고 작은 간격으로 그룹화 할 수 있으므로 (적어도 저에게는) 다소 복잡한 보고서를 만들려고합니다. 매일, 매주, 매 2 주마다, 매월마다, 매 분기마다 등등. 나는 PHP DatePeriod 및 DateInterval 함수를 사용하여 간격 테이블 열을 생성하는 방법을 찾았으나 이제는 PHP에서 생성 된 html 테이블 열과 db 열을 일치시키기 위해 MySql으로 변환해야했습니다.PHP 날짜 간격 대신 MySql 대체

$cols = array(); 
$colsIdentifiers = array(); 
$start_date = \Carbon\Carbon::parse(request('start_date')); 
$end_date = \Carbon\Carbon::parse(request('end_date')); 
$interval = DateInterval::createFromDateString(request('columns')); 
$period = new DatePeriod($start_date, $interval, $end_date); 
foreach ($period as $dt) { 
    $cols[] = $dt->format("d-m-Y"); 
    $colsIdentifiers [] = $dt->format("dmY"); 
} 

이것은 COLS를 생성하는 PHP 코드는 다음과 같습니다

<select class="form-control" id="columns" name="columns" tabindex="-1" aria-hidden="true"> 
    <option value="1 day" selected="">Each day</option> 
    <option value="1 week">Each week</option> 
    <option value="1 month">Each month</option> 
    <option value="3 months">Each quarter</option> 
    <option value="1 year">Each year</option> 
</select> 

이 보고서가 거 그룹화하는 방법을 선택하고 대한 옵션을 선택합니다.

어떻게 같은 일을 할 수 있지만 MySQL에서 ??

+0

당신이 찾고있는 것은 DATE_SUB 함수입니다. https://www.w3schools.com/sql/func_mysql_date_sub.asp –

+1

우리는 당신의 스키마에 관해서 정확히 아무것도 모릅니다. 당신은 심령술 포럼을 원해야합니다. – Strawberry

답변

0

난 당신이 문제를 해결하기 위해 BETWEEN SQL 명령을 사용할 수 있다고 생각합니다. 데이터베이스는 이러한 important 날짜가 무엇인지 알 필요는 없지만 이러한 데이터 만 유지합니다.

봅니다 그것을 할 : 당신을 도와

<?php 

$sql = "SELECT id, name, something"; 
$sql .= "FROM table"; 
$sql .= "WHERE datefield BETWEEN :minvalue AND :maxvalue"; 

$stmt = $pdo->prepare($sql); 
$stmt->execute([':minvalue' => $minLimit, ':maxvalue' => $maxLimit]); 
$data = $stmt->fetchAll(); 


foreach($data as $item) { 
    // do something with your new set. 
} 

희망을.