我说我有一个名为test
的表,其中包含以下数据
+---------+-----------------+
| id | t_number |
+---------+-----------------+
| 1 | 864291100247345 |
| 2 | 355488020906457 |
| 3 | 864296100098739 |
| 4 | 864296100098325 |
| 5 | 864296100119956 |
我想做的是能够写一条select
语句,该语句返回一个3行,其中包含t_number
列中的两个随机值和一个强制值
例如,如果强制值为864291100247345
,则输出应如下所示
+---------+-----------------+
| id | t_number |
+---------+-----------------+
| 1 | 864291100247345 |
| 2 | 355488020906457 |
| 4 | 864296100098325 |
OR
+---------+-----------------+
| id | t_number |
+---------+-----------------+
| 1 | 864291100247345 |
| 3 | 864296100098739 |
| 4 | 864296100098325 |
我尝试了以下查询,但在某种意义上说它确实返回了结果但没有必填值,但并未产生我期望的输出
SELECT * FROM test WHERE t_number = 864291100247345 OR id LIMIT 3;
最好的方法是什么?
谢谢。
答案 0 :(得分:2)
您可以使用order by
:
SELECT t.*
FROM test
ORDER BY (t_number = 864291100247345) DESC,
rand()
LIMIT 3;
这将首先返回必需数字,然后再返回随机数字。
MySQL将布尔值(=
表达式的结果)视为数字上下文中的数字,其中“ 1”表示true,“ 0”表示false。因此,order by
中的第一个表达式首先对具有“ true”条件的结果集进行排序,然后对其他条件进行排序。