Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MySQL表中获取包含两个字段的行以进行排序?_Mysql_Sql_Sql Order By - Fatal编程技术网

如何从MySQL表中获取包含两个字段的行以进行排序?

如何从MySQL表中获取包含两个字段的行以进行排序?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我在MySQL中有一个带有字段的表: id-int 日期-日期时间 评级-十进制(3,2) 依此类推,此选择中不需要其他字段。 表中大约有6000行。 我必须从表中获取过去6个月按ASC评级排序的行,然后从id ASC排序的其他行 我该怎么做?它会很快工作吗?我会做这样的事情来实现这一点: select * from tbl order by case when date >= DATE_ADD(curdate(), INTERVAL -6 MONTH)

我在MySQL中有一个带有字段的表:

  • id-int
  • 日期-日期时间
  • 评级-十进制(3,2)
依此类推,此选择中不需要其他字段。
表中大约有6000行。
我必须从表中获取过去6个月按ASC评级排序的行,然后从id ASC排序的其他行

我该怎么做?它会很快工作吗?

我会做这样的事情来实现这一点:

select * 
  from tbl
 order by case 
          when date >= DATE_ADD(curdate(), INTERVAL -6 MONTH) then 
               rating 
          else id 
           end ASC;

您需要确保过去6个月的所有记录都排在结果的第一位,然后再考虑按
评级
id
排序。您可以通过对布尔值进行排序来实现这一点

date >= CURDATE() - INTERVAL 6 MONTH
首先,然后根据需要选择
评级
id
。例如:

SELECT *
FROM data
ORDER BY date >= CURDATE() - INTERVAL 6 MONTH DESC,
         CASE WHEN date >= CURDATE() - INTERVAL 6 MONTH THEN rating
              ELSE id
         END

这行不通。它会先对id值低的旧值进行排序,然后再对评级值高的新值进行排序。@Nick你知道怎么做吗?