【问题标题】:MySql: ORDER BY ASC, Nulls at the bottomMySql:按 ASC 排序,底部为空
【发布时间】:2014-11-22 18:42:46
【问题描述】:

注意我的值实际上是空字符串而不是 null。

我想对我的表 Album ASC 进行排序,最后使用空值。我发现的每个堆栈溢出帖子都不适用于我的数据库。

以下不起作用:

  • 从歌曲中选择专辑 ORDER BY isnull(Album,'1')
  • 从歌曲中选择专辑 ORDER BY Album NULLS LAST
  • 从歌曲中选择专辑 ORDER BY Album IS NULL
  • 从歌曲中选择专辑 ORDER BY -Album DESC
  • SELECT Album FROM song ORDER BY ISNULL(Album), Album ASC
  • 从歌曲中选择专辑 ORDER BY ISNULL(专辑)
  • 从歌曲中选择专辑 ORDER BY (CASE WHEN Album IS NULL then 1 ELSE 0 END),专辑
  • 从歌曲 ORDER BY ISNULL(Album),Album 中选择专辑;
  • SELECT Album FROM song ORDER BY case when Album 为 null 然后 2 else 1 end, Album

【问题讨论】:

标签: php mysql sorting


【解决方案1】:
select album from songs ORDER BY CASE WHEN album IS NULL THEN 1 WHEN album= '' THEN 2 ELSE 3 END DESC, album ASC

它也会处理空字符串

【讨论】:

  • 您确定这些值为 NULL,而不是空字符串吗?要最后对空字符串进行排序,请指定“按大小写排序,当专辑 = '' 然后 1 否则 0 结束,专辑
  • @DanGuzman-SQLServerMVP 空字符串和空字符串有区别吗?如果它们都是空的,我将如何度过?
  • @Arif_suhail_123 如果我的字符串为空且不为空,我将如何对其进行排序?
  • 选择专辑 ORDER BY CASE WHEN album IS NULL THEN 1 WHEN album= '' THEN 2 ELSE 3 END DESC,专辑 ASC,抱歉试试这个
  • 这个命令根本没有给我任何结果,他们两个,你确定你输入的是正确的人吗?
【解决方案2】:

看看你的输出,我相信你混淆了 null 和空字符串。

Select case when album is null then 'NULL'
        when album = '' then 'string.empty'
        Else album end as Album
From song
Order by case when album is null then 2
        when album = '' then 1
        Else 0 end, album

http://sqlfiddle.com/#!2/84541/3

【讨论】:

  • @shiro,它有一个错字,但这不应该导致没有结果,它应该导致错误。如果你没有得到任何结果,那么你还有其他问题。
  • 它是因为我在我的自定义 php 制作的网站上运行 sql 查询时无法识别错误
【解决方案3】:

也许考虑为 php 使用 ORM? Doctrine or Propel,有很多种口味。 还在手工创建 SQL,为什么?

但是你的 NULL 问题确实没有用 ORM 解决。

为什么不在此列上设置约束:

NOT NULL DEFAULT ''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2011-08-24
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多