MySQL UNION和ORDER-单个表上的多个select查询
我试图从一个表中最多选择250行。首先,我想选择MySQL UNION和ORDER-单个表上的多个select查询,mysql,Mysql,我试图从一个表中最多选择250行。首先,我想选择所有列已锁定='1'的行,然后选择X列已锁定='0'的行数,按列排序(时间戳) X是firest查询中的250行 我试过这个: select * from ( select * from aktivni as a1 where locked = '1' union select * from aktivni as a2 where locked = '0' ) as tb1 limit 250 但这样,我无法通过第二次查询获得正确的值(因为,所以
所有列已锁定='1'
的行,然后选择X
列已锁定='0'
的行数,按列排序(时间戳)
X是firest查询中的250行
我试过这个:
select * from (
select * from aktivni as a1 where locked = '1'
union
select * from aktivni as a2 where locked = '0'
) as tb1 limit 250
但这样,我无法通过第二次查询获得正确的值(因为
,所以没有按排序)
如果我这样做:
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
然后,所有内容都是按排序的,因为并没有将列锁定的值设置为1
工会是正确的方法还是我可以做些别的
解决方法是用php编写代码来实现这一点。首先,我将使用以下选项选择“全部”:
SELECT*FROM table WHERE locked='1'
然后我将计算行数,并使用第二个查询获取剩余的行
SELECT*FROM table WHERE locked='0'LIMIT(250-num\u rows\u FROM\u first\u query)
但我想避免这种情况。不需要联合
-您只需在order by
和LIMIT中使用一个条件即可:
select locked, since
from aktivni cross
order by locked = '1' desc, since desc
limit 250
回答得很好@sgeddes,如果你不介意的话,你能解释一下在<代码>顺序中条件将做什么吗?@VishalZanzrukia——该条件首先对所有结果进行排序,其中locked=1
,然后是自desc以来的剩余结果。结合limit
,这可以产生所需的结果。选择locked,因为从aktivni order by locked asc,因为desc imit 5
此查询和您的ans之间有什么区别吗?