使用 2 个表和 3 个日期字段连接以降序获取多个日期的问题
Posted
技术标签:
【中文标题】使用 2 个表和 3 个日期字段连接以降序获取多个日期的问题【英文标题】:Issue in getting multiple dates in descending order with 2 table and 3 date field join 【发布时间】:2016-01-07 06:27:49 【问题描述】:我想列出包含 2 个表和 3 个不同日期字段的记录,我在下面的查询中运行
SELECT id, register.reg_date ,payment_history.payment_date ,paymentcancel_date
FROM register
LEFT JOIN payment_history ON payment_history.r_id = register.id
WHERE user_type = 'Landlord'
ORDER BY GREATEST(reg_date,paymentcancel_date,payment_date) DESC
我得到如下图所示的输出
但在上面的输出日期不是按降序我想要输出如下格式
编辑
SELECT id, register.reg_date ,payment_history.payment_date ,paymentcancel_date from register left join payment_history on payment_history.r_id = register.id where user_type = 'Landlord' ORDER BY COALESCE(reg_date, '2000-01-01') desc,
COALESCE(paymentcancel_date, '2000-01-01') desc,
COALESCE(payment_date, '2000-01-01')
desc
【问题讨论】:
我猜你一定试过了!!! 【参考方案1】:唉,如果 any 参数是 NULL
,GREATEST()
将返回 NULL
。所以,一种方法是这样的:
ORDER BY GREATEST(COALESCE(reg_date, '2000-01-01'),
COALESCE(paymentcancel_date, '2000-01-01'),
COALESCE(payment_date, '2000-01-01')
) desc
【讨论】:
Gordon Linoff:我试过你的代码,但没有得到所有日期字段的降序结果。 @HarshalKalavadiya 。 . .它应该适用于本世纪的任何日期。如果您有较旧的日期,请更改常量。您可以编辑您的问题并显示它是如何不起作用的。 查看我的编辑部分,我根据您的查询进行更改,我现在也显示输出我想要 payment_date 列的降序 @HarshalKalavadiya 。 . .我的order by
有greatest()
的功能。你的没有。【参考方案2】:
我通过以下代码解决了我的问题
$res= $this->property_model->get_all_array("SELECT reg_date as date,f_name,id as id from register order by reg_date desc");
$res1= $this->property_model->get_all_array("SELECT payment_date as date,history_id,r_id as id from payment_history order by payment_date desc");
$data['activity'] = array_merge($res,$res1);
foreach ($activity as $key => $row)
$volume[$key] = $row['date'];
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $activity);
【讨论】:
以上是关于使用 2 个表和 3 个日期字段连接以降序获取多个日期的问题的主要内容,如果未能解决你的问题,请参考以下文章
select语句对对查询结果排序时,用( )子句指定排序字段,使用( )指定升序,使用( )降序。
使用 GROUP BY 和 ORDER BY 子句以降序打印记录