PHP按4个日期中的最新日期排序

时间:2017-01-31 08:28:17

标签: php mysql date

我的条目名称和状态都有日期和说明。

该表与此类似:

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

对于日期我在sql中有4列

现在我想知道如何在最新日期之前对此列表进行排序,而日期不是唯一的列。

我通过搜索解决方案来理解我应该首先按日期对SQL进行排序,但由于日期在4列中,我已经失去了如何使用它:)

任何人都可以给我一个提示吗?

谢谢!

编辑:

这是我的代码,它为我提供了一个最近状态的人员列表:

$query = "SELECT abc__form_jobstate.id , 
`jobstate_applicant` , `jobstate_jobstate` , 
`applicant__personid` , `applicant_name` , 				 `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 =	$outputs->status_cancel_date;
$pa_date =	$outputs->status_meeting_date;
$ll_date =	$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 = [
		„Success“ => $vm_date,
		„Cancel“ => $ab_date,
		„Work“ => $pa_date,
		„Application“ => $ll_date
			];

// 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“) {
		$statusnote = $vm_note;
		};

if ($recent_statustype== „Cancel“) {
		$statusnote = $ab_note;
		};

if ($recent_statustype== „Work“) {
		$statusnote = $pa_note;
		};

if ($recent_statustype == „Application“) {
		$statusnote = $ll_note;
		};


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

}
				?>

就像上面的列表

  • 1)John Doe - 2016年12月11日的最后状态 - 取消
  • 2)Mary Jane - 2017年1月2日的最后状态 - 会议
  • 3)Peter Meyer - 2016年12月10日的最后状态 - 取消

现在我需要按日期对列表本身进行排序(在这种情况下,Mary Jane会位于顶部) - 但日期来自不同的列。

希望我能更好地解释我所挣扎的东西。谢谢大家!!!

2 个答案:

答案 0 :(得分:4)

创建名为date的列,并将其类型设置为dateCURRENT_TIMESTAMP,然后将数据添加到此table。通过应用查询ORDER BY date desc / asc。

获取此列的排序数据

答案 1 :(得分: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;
            }
    });