Php MySQL选择*但将ID数组放在结果的底部

Php MySQL选择*但将ID数组放在结果的底部,php,mysql,Php,Mysql,大家好 如果执行操作,请从表中选择* ID列的输出将是1,2,3,4,5,6,7,8,9。。。等等 我是否可以在一个查询中从id不在(3,6,9)中的表中执行select*,然后从id不在(3,6,9)中的表中执行select*,,以便输出如下 1,2,4,5,7,8,10 .... 3,6,9 多谢各位 编辑: 通过ts desc从表顺序中选择*然后从(3,6,9)中id所在的表中选择* 回复:您的编辑: SELECT * FROM table ORDER BY CASE WHEN id

大家好

如果执行
操作,请从表中选择*
ID
列的输出将是1,2,3,4,5,6,7,8,9。。。等等

我是否可以在一个查询中从id不在(3,6,9)中的表中执行
select*,
然后从id不在(3,6,9)中的表中执行
select*,
,以便输出如下 1,2,4,5,7,8,10 .... 3,6,9

多谢各位

编辑:

通过ts desc从表顺序中选择*然后
从(3,6,9)中id所在的表中选择*

回复:您的编辑:

SELECT * 
FROM table 
ORDER BY CASE WHEN id in (3,6,9) THEN 1 ELSE 0 END ASC, ts DESC
回复:您的编辑:

SELECT * 
FROM table 
ORDER BY CASE WHEN id in (3,6,9) THEN 1 ELSE 0 END ASC, ts DESC
那怎么办

select * from table where id not in (3,6,9)
UNION ALL
select * from table where id in (3,6,9)
那怎么办

select * from table where id not in (3,6,9)
UNION ALL
select * from table where id in (3,6,9)
你可以

select * from table where id not in (3,6,9)
union
select * from table where id in (3,6,9)
你可以

select * from table where id not in (3,6,9)
union
select * from table where id in (3,6,9)
您可以使用以下查询:

您可以使用以下查询:


好的,假设我已经按照另一个字段(时间戳)对表进行了排序,是否仍有按时间戳进行排序的方法,然后添加ID?Ronan,您的意思是,在每个“部分”中,您希望按
时间戳
对行进行排序?如果是这样,当id在(3,6,9)中时,您可以使用
按大小写顺序,然后1或0结束,时间戳
@Johan-
UNION
将不起作用<代码>联合
本身将导致排序以消除重复项
UNION ALL
可能会起作用,但这取决于实现细节。好吧,假设我已经按照另一个字段(时间戳)对表进行排序,是否仍要按时间戳进行排序,然后添加ID?Ronan,你的意思是在每个“部分”中是否要按时间戳对行进行排序?如果是这样,当id在(3,6,9)中时,您可以使用
按大小写顺序,然后1或0结束,时间戳
@Johan-
UNION
将不起作用<代码>联合本身将导致排序以消除重复项
UNION-ALL
可能会起作用,但这取决于实现细节。re:您的编辑:应该这样吗<代码>通过ts desc从id不在(3,6,9)顺序的表中选择*然后
从id在(3,6,9)顺序的表中选择*
re:您的编辑:是否应该<代码>通过ts desc从id不在(3,6,9)顺序的表中选择*,然后
从id在(3,6,9)
+1的表中选择*,以使用
联合所有
,而不是
联合
,因为我认为后者很有可能发生排序,以消除重复项,从而完全否定练习。然而,我仍然认为这在语义上是可疑的。Optimizer的未来版本应该可以自由地将此表达式重写为语义等效的
select*from table,其中id不为null
,因为它没有说明所需的最终顺序,只是依赖于当前的实现。+1用于使用
UNION ALL
,而不是像我所想的那样使用
UNION
对于后者,很有可能会发生一种排序,以消除重复项,从而完全否定该练习。然而,我仍然认为这在语义上是可疑的。Optimizer的未来版本应该可以自由地将此表达式重写为语义等效的
select*from table,其中id不为null
,因为它没有说明所需的最终顺序,只依赖于当前的实现。