2014-03-01 72 views
1

我有PDO查詢,以便從過去五年同一日期的選擇日記PDO的搜索結果:得到一個數組

$sql = 'select * from diary where dtime in (?,?,?,?,?) order by dtime desc'; 
$result = $db->prepare($sql); 
$result->execute($fiveYears); //pass in the $fiveYear array of five dates like 2014-03-01, 2013-03-01 ~ 2010-03-01 

,然後我使用foreach循環這樣的回聲出結果:

foreach($result as $row){ 
~~echo table contents here~~ 
} 

即使沒有那一年的內容,我也想在五個表格中顯示內容,但是foreach循環只會回顯包含內容的日期。所以,如果有對2014年3月1日和2012-03-01內容,其結果是:

  • 2014年3月1日:日記內容
  • 2012-03-01:日記內容

但我想讓它顯示

  • 2014年3月1日:日記內容
  • 2013-03-01:空
  • 2012-03-01 :日記內容
  • 2011-03-01:空
  • 2010-03-01:空

能否請你幫我,我怎麼能做到這一點? 我應該將$ fiveYear數組與結果數組結合起來嗎?怎麼樣? 我應該在PHP中使用in_array嗎? 還是有更好的方法來做到這一點? 謝謝!

回答

2

嗯,這個簡單的任務要求比當地鄉親多一點理解已經(甚至要求問題身體的閱讀!)

$date_start = '2012-03-01'; 
$date_end = '2012-03-31'; 
$range  = array(); 
$date  = $date_start; 
while ($date <= $date_end) 
{ 
    $range[] = $date; 
    $date = date("Y-m-d", strtotime("$date + 1 day")); 
} 

$sql = 'select * from diary where dtime BETWEEN ? AND ? order by dtime desc'; 
$stm = $db->prepare($sql); 
$stm->execute(array($date_start, $date_end)); 
$result = array(); 
while ($row = $stm->fetch()) 
{ 
    $result[$row['dtime']] = $row; 
} 
?> 
<?php foreach ($range as $day): ?> 
<?=$day?>: 
<?php if (isset($result[$day])): ?> 
diary entry <?=$result[$day]['title']?> 
<? else: ?> 
empty 
<? endif ?> 

但是,如果DTIME包含datetime值,因爲顧名思義,它將無法工作。您需要在您的查詢中選擇DATE(dtime) as dtime, *然後

+0

感謝您的意見:)閱讀約4倍的問題,但仍然誤解了它,直到我讀取您的代碼 – CodeBird

+0

非常感謝。你的代碼解決了我的問題。 – Gino