【问题标题】:PHP order foreach by latest date out of 4 datesPHP 按 4 个日期中的最新日期订购 foreach
【发布时间】:2017-01-31 08:28:16
【问题描述】:

我有一个名称和 4 个状态的条目,其中包含日期和描述。

表格类似这样:

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 日的最后状态 - 已取消

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

希望我能更好地解释我所遇到的问题。谢谢大家!!!

【问题讨论】:

标签: php mysql date


【解决方案1】:

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

【讨论】:

  • 订购者 -> 订购者
  • 还有:这是->它的;-)
【解决方案2】:

你可以使用 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;
            }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多