Fad*_*ady 3 php mysql database sql-server
我想选择行,直到找到某个值,但它不是数字,所以我不能使用 > 或 <。我怎样才能做到这一点 ?
例子 :
-----
Value
-----
45
434
348
213
543
3445
343
123
34345
Run Code Online (Sandbox Code Playgroud)
我想选择 543 之前的所有记录(不按任何顺序排序)
提前致谢
小智 6
这个答案可能会迟到,但由于这是谷歌上第一个带有“mysql select直到”术语的结果,希望这可以对某人有所帮助。
您可以做的是声明一个标记,如果您找到所需的值,请将标记设置为除 之外的任何值NULL。然后我们可以用来ISNULL检查是否已经到达该行。
SET @marker = NULL;
SELECT value FROM table1 WHERE ISNULL(@marker:=IF(value=543,value,@marker));
Run Code Online (Sandbox Code Playgroud)
解决了“没有顺序”的问题,也就是说,您必须选择某种顺序(例如主键的顺序,或者记录分配 OID 的顺序),您的问题变成:
"I want all the records whose ordering field is less than the value
of the row for which ordering field is minimum, and VALUE is 543".
Run Code Online (Sandbox Code Playgroud)
因此,您选择值为 543 的最小行
SELECT MIN(id) AS id FROM yourtable WHERE value = 543
Run Code Online (Sandbox Code Playgroud)
或者也许,出于其他目的,类似的东西
SELECT MIN(id) AS id FROM yourtable WHERE value >= 543
Run Code Online (Sandbox Code Playgroud)
然后选择该记录之前的所有记录:
SELECT value FROM yourtable WHERE id < ( SELECT MIN(id) AS id FROM yourtable WHERE value = 543 );
Run Code Online (Sandbox Code Playgroud)
所以你的表可能是:
ID Value
-----------
1 45
2 434
3 348
4 213
5 543
6 3445
7 343
8 123
9 34345
Run Code Online (Sandbox Code Playgroud)
你会得到:
45
434
348
213
543
Run Code Online (Sandbox Code Playgroud)
你看不到顺序,但一定有一个。这是 上的订单id。
根据您的要求,value可以是任何内容 - 文本,甚至图像 BLOB - 并且“排序”保持隐藏。
在其他语言中,您会执行以下操作:
qry = SQL.exec('SELECT * FROM yourtable;');
while ((value = qry.next().value) != '543':
write value '\n'
qry.close()
Run Code Online (Sandbox Code Playgroud)
但是,要么SELECT不会指定 的顺序,并且您每次可能会得到不同的结果,或者这将是表中元组插入的顺序。这与显式使用相同id。
| 归档时间: |
|
| 查看次数: |
11111 次 |
| 最近记录: |