我有一个名为qazxsw POI与qazxsw POI和POI qazxsw列的MySQL表。
这里就是我试图完成:
example
为空,为了通过my_order
。alt_order
不为空,由alt_order
顺序,但行位置的上方或下方,其中,应当基于在my_order
整数。伪代码:
alt_order
理想的输出:
my_order
尝试:
alt_order
编辑:
如果
SELECT * FROM example ORDER BY IF(alt_order IS NULL, my_order, [MOVE UP OR DOWN BASED ON alt_order])
为正N,那么它应该向下移动n行。在另一方面,如果+--------+----------+-----------+-------------------------------------+ | desc | my_order | alt_order | notes | +--------+----------+-----------+-------------------------------------+ | Item 1 | 1 | NULL | Ordered by my_order | | Item 3 | 122 | -1 | Ordered by my_order + alt_order | <-- Move up one row | Item 2 | 50 | NULL | Ordered by my_order | | Item 4 | 127 | NULL | Ordered by my_order | | Item 5 | 205 | NULL | Ordered by my_order | +--------+----------+-----------+-------------------------------------+
是否定的N,那么就应该上移n行。
它看起来像您指定可以通过命令行两次获得的结果。首先,为了通过SELECT
*
FROM
example
ORDER BY
IF(alt_order IS NULL, my_order, my_order + alt_order)
# The problem with using this method is that the value of my_order
# has to be the same as the value of above it to work.
,并分配一个初始的“行号”。然后,通过取第二次通过,由“行偏移”调整初始“行数”订购。因为 “行数” 和 “行偏移” 都是整数,当我们添加它们(RN = 2 + RO = 0),我们可以得到一个碰撞(RN = 3 RO = -1)。为了使更多的排序确定的,我们可以根据需要调整
alt_order
查询可在下面为您服务或者在正确的方向发送给您。按照你订单使用CASE BY语句,你可以控制的方式您对数据进行排序。
alt_order