mysql - MySQL - 选择有限制的行
问题描述
如何根据条件(使用IN
或任何其他条件)选择一定数量的行,并且如果条件返回的行数少于LIMIT x
然后从剩余行中选择,直到LIMIT x
满足?
所以,如果我有下表:
id comment ord
1 ... null
2 ... 1
3 ... 2
4 ... null
那么结果集应该是,使用LIMIT 3
:
id comment ord
2 ... 1
3 ... 2
1 ... null
如果该ord
列不为空,那么我想选择相应的行,如果不是,我想从其余行中选择一个或多个,具有ord
NULL,直到LIMIT 3
达到条件。
另一个例子,如果我有下一个表数据:
id comment ord
1 ... 3
2 ... 1
3 ... 2
4 ... null
那么结果集应该是
id comment ord
2 ... 1
3 ... 2
1 ... 3
我试过这个mysql代码:
SELECT t.* FROM table t
WHERE
t.ord IN (SELECT t1.ord FROM table t1 WHERE t1.ord IS NOT NULL ORDER BY t1.ord ASC)
OR
t.id IN (SELECT t2.id FROM table t2 WHERE t2.ord IS NULL ORDER BY t2.id ASC)
LIMIT 3;
但我总是得到有 的行ord NULL
,即使我有一些ord
不为空的列。
请问有什么帮助吗?
解决方案
检查是否ord
为 null 在您的ORDER BY
:
SELECT *
FROM table
ORDER BY ord IS NULL, ord, id
LIMIT 3
ord IS NULL
将0
用于 non-null ord
,1
用于 null ord
,因此这会将所有非空行放在首位。在它将订购的那些中ord
,其余的将被订购id
。
然后LIMIT 3
将选择所有这些中的前 3 个。
推荐阅读
- r - 如何使用包中的数据对象作为 OpenCPU 中函数的输入?
- python - 引发张量形状错误的 Torch.nn.Transformer 示例代码
- c++ - 如何使类函数自动处理不同的变量
- android - 材料搜索栏未显示在布局预览中
- docker - Docker文件非root用户理论问题
- reactjs - 401 Unauthorized on unprotected resource
- c# - 当 ScrollView 在 Unity 中到达底部(客户端和服务器端)时加载更多 Json 数据
- python - 验证数据框中重复的子字符串
- java - 如何将 Arraylist 的最后 3 个元素添加到不同的 Arraylist?
- php - 如何在codeigniter中的unixtimestamp中转换时间