2017-01-31 3 views
2

名前と日付と説明を持つ4つのステータスを持つエントリがあります。PHPは4日付のうち最新の日付でforeachを注文します

表は次のようになります。私のforeachループで

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

私はので、私は私のリストには、このようなものを示して最新であるこれら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を持って

私はどのように日付が一意の列ではない最新の日付でこのリストを並べ替えることができますか?

- 私がそれをする方法を失った4列にしている私は私が最初の日付ではなく、日付としてSQLを並べ替える必要がある解決策を検索することによって、理解:)

誰も私にヒントを与えることはできますか?

ありがとうございます!

編集:リストのような

$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を満たす)ピーター・マイヤー - 2016年12月10日の最後のステータスは - 今私はリスト自体によってをソートする必要があります

をキャンセル日付(メアリー・ジェーンはこの場合はトップになります) - 日付は異なる列から来ます。

私は私が苦労していることをより良く説明することができます。皆さん、ありがとうございました!!!

+1

の使用を作ることができます。だから私たちはあなたを助けることができる –

+1

あなたはあなたの投稿に日付を持つテーブルから "desc"を追加することはできますか?多分私たちはmysqlだけでそれを行うことができます:) – Fky

+0

参照http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to- 「非常にシンプル」なSQLクエリー – Strawberry

答えて

4

dateという名前の列を作成し、その型をdateCURRENT_TIMESTAMPに設定し、次にtableにデータを追加します。 ORDER BY date desc/ascのクエリを適用して、この列でソートデータを取得している間。

+2

**注文** ** - **注文** –

+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; 
      } 
    }); 
関連する問題