【发布时间】: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 日的最后状态 - 已取消
现在我需要按日期对列表本身进行排序(在这种情况下,玛丽·简将位于顶部) - 但日期来自不同的列。
希望我能更好地解释我所遇到的问题。谢谢大家!!!
【问题讨论】:
-
只显示您尝试过的查询和示例数据。所以我们可以帮助你
-
你能在你的帖子中添加一个带有日期的表格中的“desc”吗?也许我们只能用 mysql 来做 :)
-
查看
GREATEST函数:dev.mysql.com/doc/refman/5.7/en/… -
为什么不能让 SQL 为您进行排序?