MySQL UNION 和 ORDER - 单个表上的多个选择查询



我正在尝试从一个表中选择最多 250 行。首先,我想选择ALLlocked='1'行,然后选择Xlocked = '0'按列since(时间戳(排序的行数。

X 是 250 - 来自最精细查询的行数。

我试过这个:

select * from (
select * from aktivni as a1 where locked = '1'
union
select * from aktivni as a2 where locked = '0'
) as tb1 limit 250

但是有了这个,我在第二个查询中没有得到正确的值(不是按since排序(。

如果我这样做:

select * from (
select * from aktivni as a1 where locked = '1'
union
select * from aktivni as a2 where locked = '0' ORDER BY since DESC
) as tb1 limit 250

比所有内容都按since排序,我没有得到ALLlocked设置为 1 的值。

工会的做法是正确的,还是我可以做其他事情?

解决方法是用 php 编写代码来做到这一点。首先,我会选择所有: SELECT * FROM table WHERE locked = '1'

比我会计算行并通过第二个查询获取剩余行 SELECT * FROM table WHERE locked = '0' LIMIT (250 - num_rows_from_first_query)但我想避免这种情况。

不需要union - 您只需在order by中使用条件即可limit

select locked, since
from aktivni cross
order by locked = '1' desc, since desc
limit 250
  • SQL 小提琴演示

最新更新