按字段排序命令(MySQL)中的空字段排序
我们正在从数据库中选择几个字段(包括左联接),并使用以下命令按包含INT的字段对其排序:按字段排序命令(MySQL)中的空字段排序,mysql,database,Mysql,Database,我们正在从数据库中选择几个字段(包括左联接),并使用以下命令按包含INT的字段对其排序: ORDER BY FIELD (t.type, '1','2','4','5','3') 这是它们出现的顺序,但是我们也有不包含整数的条目,它们将作为NULL重新调整。这很好,但是我们似乎不能将空条目放在我们想要的地方 我们希望他们在列表中排名第二,例如: ORDER BY FIELD (t.type, '1','NULL','2','4','5','3') 或 等等 我们如何才能做到这一点,并将带
ORDER BY FIELD (t.type, '1','2','4','5','3')
这是它们出现的顺序,但是我们也有不包含整数的条目,它们将作为NULL重新调整。这很好,但是我们似乎不能将空条目放在我们想要的地方
我们希望他们在列表中排名第二,例如:
ORDER BY FIELD (t.type, '1','NULL','2','4','5','3')
或
等等
我们如何才能做到这一点,并将带有空t.type字段的条目放在列表的第二位
自从发布这条消息以来,我一直在到处搜索,但找不到任何关于这个主题的东西
非常感谢您的帮助
更新:
以下是我们使用的完整select语句:
select d.url, d.lid, d.title, d.description, d.date, d.hits, d.downloadratingsummary, d.totalvotes, d.totalcomments, d.filesize, d.version, d.homepage, d.ns_compat, d.ns_des_img, t.type from downloads_downloads d LEFT JOIN downloads_type t on d.lid = t.lid where cid=96 ORDER BY FIELD (t.type, 1,12,2,4,5,3), d.date DESC LIMIT 0,20
删除
NULL
周围的引号。这不是一根绳子。事实上,也可以删除数字周围的引号。在这种情况下,它们可能不会受伤,但它们也不是弦
如果这不起作用,我不知道如何正确处理它。报告说:
如果str为NULL,则返回值为0,因为NULL无法与任何值进行相等比较
因此,正如您在第三个示例中尝试的那样,您可能必须使用0,但删除引号可能会解决此问题。删除
NULL
周围的引号。这不是一根绳子。事实上,也可以删除数字周围的引号。在这种情况下,它们可能不会受伤,但它们也不是弦
如果这不起作用,我不知道如何正确处理它。报告说:
如果str为NULL,则返回值为0,因为NULL无法与任何值进行相等比较
因此,正如您在第三个示例中尝试的那样,您可能必须使用0,但删除引号可能会解决这个问题。为什么不在SELECT语句中这样做呢 选择IFNULL(t.type,2) 来自表\u name t
在这里,您将2的值分配给任何空值。这对您有用吗?为什么不在SELECT语句中这样做 选择IFNULL(t.type,2) 来自表\u name t 在这里,您将2的值分配给任何空值。这对你有用吗?试试这个
ORDER BY CASE `t.type`
WHEN '1' THEN 1
WHEN '2' THEN 2
WHEN '4' THEN 3
WHEN '5' THEN 4
WHEN '3' THEN 5
WHEN null THEN 6
END
试试这个
ORDER BY CASE `t.type`
WHEN '1' THEN 1
WHEN '2' THEN 2
WHEN '4' THEN 3
WHEN '5' THEN 4
WHEN '3' THEN 5
WHEN null THEN 6
END
是否有一个值可以替换在其他任何地方都不会出现的NULL?比如:
ORDER BY FIELD(coalesce(t.type, -1), '1', '-1', '2', '4', '5', '3')
顺便说一下,参数也可以是数字而不是字符串:
ORDER BY FIELD(coalesce(t.type, -1), 1, -1, 2, 4, 5, 3)
是否有一个值可以替换在其他任何地方都不会出现的NULL?比如:
ORDER BY FIELD(coalesce(t.type, -1), '1', '-1', '2', '4', '5', '3')
顺便说一下,参数也可以是数字而不是字符串:
ORDER BY FIELD(coalesce(t.type, -1), 1, -1, 2, 4, 5, 3)
感谢您的回复,但是这个命令“orderbyfield(t.type,'1,NULL,2,4,5,3')”仍然首先返回NULL。关于如何使null返回列表中的第二位,有什么想法吗?谢谢你的帮助。听起来你找到了你的答案,但为了澄清一下,你上面评论中的例子使整个系列成为一个长长的字符串。我的意思是:
orderbyfield(t.type,1,NULL,2,4,5,3)
(注意这里根本没有引号)。感谢您的回复,但是这个命令“orderbyfield(t.type,'1,NULL,2,4,5,3')”仍然首先返回NULL。关于如何使null返回列表中的第二位,有什么想法吗?谢谢你的帮助。听起来你找到了你的答案,但为了澄清一下,你上面评论中的例子使整个系列成为一个长长的字符串。我的意思是:按字段排序(t.type,1,NULL,2,4,5,3)
(注意这里根本没有引号)。这非常有效,非常感谢您发布解决方案。我们按照你的建议使用了-1。这种方法在性能上有什么缺点吗?这非常有效,非常感谢您发布解决方案。我们按照你的建议使用了-1。这个方法有什么主要的性能缺点吗?我们尝试了这个方法,但是它产生了一个单独的列,名为“selectifnull(t.type,2)”——也许我们没有正确地编写语法。无论如何,感谢您的帮助,上面回答了一个有效的解决方案。我们尝试了此方法,但结果是出现了一个单独的列,名为“SELECT IFNULL(t.type,2)”-可能是我们没有正确编写语法。无论如何,感谢您的帮助,上面回答了一个有效的解决方案。