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

Mysql 具有绝对位置的排序结果

Mysql 具有绝对位置的排序结果,mysql,Mysql,我有一个ID和位置表,可以在指定的位置设置行吗 得到 ID PLACE 5 (null) 3 2 4 (null) 6 4 2 (null) 1 (null) 而不是 ID PLACE 6 4 5 (null) 4 (null) 3 2 2 (null) 1 (null) 对于此数据,这意味着将place=2的行作为结果中的第二行,将place=4的行作为结果中的第四行,而其他行则按其原始顺序覆盖它们 答复 select * from re

我有一个ID和位置表,可以在指定的位置设置行吗

得到

ID  PLACE
5   (null)
3   2
4   (null)
6   4
2   (null)
1   (null)
而不是

ID  PLACE
6   4
5   (null)
4   (null)
3   2
2   (null)
1   (null)
对于此数据,这意味着将place=2的行作为结果中的第二行,将place=4的行作为结果中的第四行,而其他行则按其原始顺序覆盖它们

答复

select * from records 
order by FIELD(ID, 5,3,4,6,2,1)
很好,很有趣,但是错了

SELECT CASE WHEN NULLID IS NULL 
       THEN ID
       ELSE NULLID
       END AS ID, 
       toFillTable.place
FROM 
(
    SELECT CASE WHEN id IS NULL 
           THEN @placeHolder := @placeHolder + 1 
           ELSE null 
           END as placeHolder
         , r.*
    FROM
    (
        SELECT @row := @row + 1 as row
        FROM records t1, (SELECT @row := 0) t2
    ) s
        INNER JOIN (SELECT @placeHolder := 0) t12
        LEFT OUTER JOIN records r
            ON s.row = r.place
    order by row
) toFillTable
    LEFT OUTER JOIN
    (
          SELECT @row1 := @row1 + 1 as nullRowPlace, t1.id as nullId
          FROM records t1, (SELECT @row1 := 0) t2
          where place is null
          order by t1.id desc
    ) nullPlaceTable ON toFillTable.placeHolder = nullPlaceTable.nullRowPlace
第一个查询输出结果:

toFillTable

placeHolder    Id    Place
    1        (null)  (null)
  (null)       3       2
    2        (null)  (null)
  (null)       6       4
    3        (null)  (null)
    4        (null)  (null)
当place在右边的行上给出时,它给出Id,并在place为null的行上给出一个名为占位符的计数器

第二个问题:

nullPlaceTable 

NullPlaceholder    IDNull
     1                5
     2                4
     3                2
     4                1
当place为null时,它给出行的排名

两者的结合给了我们所期待的

参考:


什么是“他们的原始订单”-为什么ID 5排在第一位?(关系数据库中的行没有任何顺序-如果希望查询输出中有特定的顺序,则需要使用ORDERBY子句指定该顺序。)在示例中,FIDLE原始顺序由
id desc
Awesome设置!非常感谢你的努力。