Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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_Database - Fatal编程技术网

按字段排序命令(MySQL)中的空字段排序

按字段排序命令(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') 或 等等 我们如何才能做到这一点,并将带

我们正在从数据库中选择几个字段(包括左联接),并使用以下命令按包含INT的字段对其排序:

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)”-可能是我们没有正确编写语法。无论如何,感谢您的帮助,上面回答了一个有效的解决方案。