【问题标题】:Custom MYSQL Custom Sort Order自定义 MYSQL 自定义排序顺序
【发布时间】:2012-09-27 02:06:23
【问题描述】:

我有一个简单的媒体库,可以根据代码示例中的日期对专辑进行排序。在专辑中,我有一张用于删除媒体的“垃圾”专辑。如何保留 ORDER BY albums.date DESC 但始终将“垃圾”专辑设置为最后一个?专辑在“标题”列中,始终被称为“垃圾”。

感谢您的帮助...

$query = mysql_query("SELECT albums.*,photos.path FROM albums LEFT JOIN photos ON albums.albumCover=photos.id WHERE albums.user='$siteUserID' ORDER BY albums.date DESC");

【问题讨论】:

标签: mysql sql sql-order-by


【解决方案1】:

您可以利用CASE 上的ORDER BY 子句

SELECT...
FROM...
WHERE..
ORDER BY   (CASE 
               WHEN albums.title = 'TRASH'
               THEN 1
               ELSE 0
           END ) ASC, albums.date DESC

【讨论】:

  • @xtiaan 在 order by 子句中,它测试title 的值是否是trash,如果是trash,它为该行设置一个虚拟值1 否则 0 然后按升序对它们进行排序。之后,它会按降序对albums.date 进行排序。
【解决方案2】:

您将需要使用ORDER BY CASETrash 值分配更高的数字,因此它们的排序比其他值晚。不是Trash 的值得到零,Trash 得到 1。零首先排序!

SELECT
  albums.*,
  photos.path
FROM 
  albums
  LEFT JOIN photos ON albums.albumCover=photos.id 
WHERE albums.user='$siteUserID' 
ORDER BY
  CASE WHEN albums.title = 'Trash' THEN 1 ELSE 0 END,
  /* Then suborder the zeros and ones by date */
  albums.date DESC

【讨论】:

  • 感谢您的信息,迈克尔 - 非常感谢!
猜你喜欢
  • 2015-05-12
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多