2017-01-31 75 views
2

我有一個名稱和4個狀態,有日期和說明的條目。4個日期中的最後一個日期的PHP訂單foreach

表與此類似:

name, 
date_cancelation, 
date_success, 
date_meeting, 
date_setup, 
note_cancelation, 
note_success, 
note_meeting, 
note_setup 

在我的foreach循環我實現以確定這些4個日期是最新的,所以我表現出我的名單是這樣的:

1) John Doe - last status at 11.12.2016 - canceled 
2) Mary Jane - last status at 02.01.2017 - meeting 
3) Peter Meyer - last status at 10.12.2016 - canceled 

日期我有4列在sql中

現在我想知道我可以如何排序這個列表的最新日期,而日期不是一個獨特的列。

我的理解通過搜索,我應該先排序的日期,但隨着日期的SQL的解決方案是在4列i'm丟了怎麼給它:)

誰能給我一個提示?

謝謝!

編輯:

這是代碼我已經和它給了我成功的人的名單以及他們最近的狀態:

$query = "SELECT abc__form_jobstate.id , 
 
`jobstate_applicant` , `jobstate_jobstate` , 
 
`applicant__personid` , `applicant_name` , \t \t \t \t `status_success_date` , `status_cancel_date` , `status_meeting_date` , `status_application_date`, 
 
`success_note` , `cancel_note` , `meeting_note` , `application_note` 
 
FROM `abc__form_jobstate` 
 
LEFT JOIN abc__form_applicant ON (applicant__personid = abc__form_applicant.id) 
 
WHERE `applicant_jobangebot` =" . $di . „; 
 

 
$db->setQuery($query); 
 
$output = $db->loadObjectList(); 
 

 
foreach ($output as $outputs) { 
 

 
// set variables for dates 
 

 
$vm_date = $outputs->status_success_date; 
 
$ab_date = \t $outputs->status_cancel_date; 
 
$pa_date = \t $outputs->status_meeting_date; 
 
$ll_date = \t $outputs->status_application_date; 
 

 
// set variables for notes 
 

 
$vm_note = $outputs->success_note; 
 
$ab_note = $outputs->cancel_note; 
 
$pa_note = $outputs->meeting_note; 
 
$ll_note = $outputs->application_note; 
 

 
// put the dates into an array 
 
$statusdates = [ 
 
\t \t „Success「 => $vm_date, 
 
\t \t „Cancel「 => $ab_date, 
 
\t \t „Work「 => $pa_date, 
 
\t \t „Application「 => $ll_date 
 
\t \t \t ]; 
 

 
// See what date is the most recent inside the record 
 

 
$max = max(array_map('strtotime', $statusdates)); 
 
$recent_status = date('d.m.Y', $max); 
 
$recent_statustype = array_search(max($statusdates),$statusdates); 
 

 
if ($recent_statustype== „Success「) { 
 
\t \t $statusnote = $vm_note; 
 
\t \t }; 
 

 
if ($recent_statustype== „Cancel「) { 
 
\t \t $statusnote = $ab_note; 
 
\t \t }; 
 

 
if ($recent_statustype== „Work「) { 
 
\t \t $statusnote = $pa_note; 
 
\t \t }; 
 

 
if ($recent_statustype == „Application「) { 
 
\t \t $statusnote = $ll_note; 
 
\t \t }; 
 

 

 
echo '<div class="col-lg-5「><strong>' . $recent_statustype . '</strong> at ' . $recent_status . '<br>' . $statusnote . '</div>'; 
 

 
} 
 
\t \t \t \t ?>

It's像列表以上

  • 1)John Doe - 最後狀態11.12.2016 - 取消
  • 2)瑪麗珍 - 在2017年2月1日最後的狀態 - 在二○一六年十月一十二日最後的狀態 - - 會議
  • 3)彼得·邁耶取消

現在我需要排序列表本身日期(瑪麗珍將在這種情況下是最高的) - 但日期來自不同的列。

希望我能更好地解釋一下我的努力。謝謝你們!!!

+1

的只是顯示你試圖查詢和樣本數據。所以我們可以幫助您 –

+1

您可以添加到您的文章從日期表的「desc」?也許我們可以只用mysql來做:) – Fky

+0

請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to- be-a-very-simple-sql-query – Strawberry

回答

4

創建名爲date的列,並將其類型設置爲dateCURRENT_TIMESTAMP,然後將數據添加到此table。通過應用查詢ORDER BY date desc/asc按此列提取排序數據。

+2

**訂購** - > ** ORDER BY ** –

+0

還有:它 - >它;-) – Strawberry

0

你可以利用uasort http://php.net/manual/en/function.uasort.php

uasort($array, function($a , $b){ 
     $aLatestTimeStamp = $a->getLatestTimeStamp(); 
     $bLatestTimeStampt = $b->getLatestTimeStamp(); 
      if ($aLatestTimeStamp == $bLatestTimeStampt) { 
       return 0; 
      } 
      if ($aLatestTimeStamp < $bLatestTimeStampt) { 
       return -1; 
      } else { 
       return 1; 
      } 
    }); 
相關問題