使用 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 参数是 NULLGREATEST() 将返回 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 bygreatest() 的功能。你的没有。【参考方案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语句对对查询结果排序时,用( )子句指定排序字段,使用( )指定升序,使用( )降序。

MySQLi + PHP 按日期和 ID 降序排序

使用 GROUP BY 和 ORDER BY 子句以降序打印记录

树集以降序排列元素

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取

PostgreSQL 查询基于连接条件和 max(date) 获取属性