Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL UNION和ORDER-单个表上的多个select查询_Mysql - Fatal编程技术网

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

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 但这样,我无法通过第二次查询获得正确的值(因为,所以

我试图从一个表中最多选择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之间有什么区别吗?