我正在尝试从一个表中选择最多 250 行。首先,我想选择ALL
列locked='1'
行,然后选择X
列locked = '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
排序,我没有得到ALL
列locked
设置为 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 小提琴演示