gpt4 book ai didi

mysql - 以绝对位置排序结果

转载 作者:行者123 更新时间:2023-11-29 08:32:50 25 4
gpt4 key购买 nike

http://sqlfiddle.com/#!2/1840d/1

我有一个 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为空的行上给出一个名为PlaceHolder的计数器。

第二个查询:

nullPlaceTable 

NullPlaceholder IDNull
1 5
2 4
3 2
4 1

当 place 为空时,它给出行的排名。

两者的结合达到了预期!

Fiddle.

引用:

关于mysql - 以绝对位置排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com