1

同じ問題を抱えているいくつかの投稿を読みました。私は彼らの答えを適応させようとしましたが、成功しませんでした。ステータスごとに列をさらにソートするよりも、ステータスで列をソートしたい。以下のクエリで私の主張が明確になるかもしれません

SELECT a.*,STR_TO_DATE(d_date, "%m/%d/%Y")>CURDATE() as status
FROM table AS a ORDER BY status DESC, 
IF(status=0,
'DATEDIFF(STR_TO_DATE( a.d_date, "%m/%d/%Y" ),CURDATE()) DESC',
'DATEDIFF(STR_TO_DATE( a.d_date, "%m/%d/%Y" ),CURDATE()) ASC')

更新: 以下のクエリの後

SELECT a . * , STR_TO_DATE( d_date,  "%m/%d/%Y" ) > CURDATE( ) AS 
STATUS 
FROM  `table` AS a
ORDER BY STATUS DESC , IF( 
STATUS =0, DATEDIFF( STR_TO_DATE( a.d_date,  "%m/%d/%Y" ) , CURDATE( ) ) DESC , DATEDIFF( STR_TO_DATE( a.d_date, "%m/%d/%Y" ) , CURDATE( ) ) ASC ) 
LIMIT 0 , 30

以下のエラーが発生しました

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC, DATEDIFF(STR_TO_DATE( a.d_date, "%m/%d/%Y" ),CURDATE()) ASC) LIMIT ' at line 4

私のテーブル名がtableこれよりも

d_date
06/28/2012
06/23/2012
06/20/2012
06/19/2012

現在の日付が06/21/2012

出力は

d_date               status
06/23/2012              1
06/28/2012              1
06/20/2012              0
06/19/2012              0

この情報で十分です。まだはっきりしていない場合はお知らせください。

ありがとう

4

2 に答える 2

3

これを試してみてください -

SELECT
  a.*,
  STR_TO_DATE(d_date, '%m/%d/%Y') > CURDATE() AS status
FROM
  table AS a
ORDER BY
  status DESC, 
  IF(status = 0,
    DATEDIFF(STR_TO_DATE(a.d_date, '%m/%d/%Y'),CURDATE()) * -1,
    DATEDIFF(STR_TO_DATE(a.d_date, '%m/%d/%Y'),CURDATE())
  )
于 2012-06-21T12:03:18.317 に答える
0

この(新しい)ソリューションでうまくいくと思います:

SELECT a.*, STR_TO_DATE(d_date, "%m/%d/%Y")>CURDATE() as status 
FROM `table` AS a ORDER BY status DESC, 
IF(status=0,
CONCAT_WS(' ', DATEDIFF(STR_TO_DATE( a.d_date, "%m/%d/%Y" ),CURDATE()), 'DESC'),
CONCAT_WS(' ', DATEDIFF(STR_TO_DATE( a.d_date, "%m/%d/%Y" ),CURDATE()), 'ASC'))
于 2012-06-21T11:31:22.947 に答える