在实时数据库中查找 MYSQL table 中最后一条记录的下一个最低值
Find the next lowest value than the last record in a MYSQL table in a real time DB
我有一个简单的 table 可以跟踪视频文件和一个 program_id 数字,如下所示:
|--------------------|----------------|-------- ----------|
|编号 |文件名 | program_id |
|--------------------|----------------|-------- ----------|
| 1 | vid1.mp4 | 1001 |
|--------------------|----------------|-------- ----------|
| 2 | vid2.mp4 | 1010 |
|--------------------|----------------|-------- ----------|
| 3 | vid3.mp4 | 1005 |
|--------------------|----------------|-------- ----------|
我想做的是提取最低的程序 ID,然后从数据库中提取下一个最低的程序 ID。 program_id 不是线性的,因为我在它们之间插入和删除视频,因此循环代码可以提取下一个最低视频,以防添加新视频。所以在第一遍我希望期望 1001,下一遍 1005 然后下一遍 1010.
现在我成功地得到了这个,我可以在 python 中拉到最低的 program_id:
while true:
sql = "SELECT * FROM videos WHERE program_id = ( SELECT MIN(program_id) FROM video)"
cnx.execute (sql)
result = cnx.fetchall()
for qq in result:
id = qq[0]
filename = qq[1]
program_id = qq[3]
playVideo(filename)
有没有办法使用循环并使用最后一个 programn_id 和下一个最低的 select 进行另一个查询?
使用 Limit 和 offset 获取下一个视频
CREATE TABLE videos (
`id` INTEGER,
`filename` VARCHAR(8),
`program_id` INTEGER
);
INSERT INTO videos
(`id`, `filename`, `program_id`)
VALUES
('1', 'vid1.mp4', '1001'),
('2', 'vid2.mp4', '1010'),
('3', 'vid3.mp4', '1005');
✓
✓
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 0;
id | filename | program_id
-: | :------- | ---------:
1 | vid1.mp4 | 1001
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 1;
id | filename | program_id
-: | :------- | ---------:
3 | vid3.mp4 | 1005
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 2;
id | filename | program_id
-: | :------- | ---------:
2 | vid2.mp4 | 1010
db<>fiddle here
i = 0
while true:
sql = "SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET "+str(i);
cnx.execute (sql)
result = cnx.fetchall()
for qq in result:
id = qq[0]
filename = qq[1]
program_id = qq[3]
i = i +1
playVideo(filename)
但是因为你只得到一行,所以你不需要 for 循环。
您还需要一个断点来离开 While 循环,例如当不再有行时。
我真的不明白运行使用单独的查询来获取此处每一行的意义。
您可以简单地 运行 一个查询,为您提供按递增 program_id
排序的视频,然后循环遍历 查询的结果 :
while true:
sql = "SELECT * FROM videos ORDER BY program_id"
cnx.execute (sql)
result = cnx.fetchall()
for qq in result: -- fetch each video, ordered by "programm_id"
id = qq[0]
filename = qq[1]
program_id = qq[3]
playVideo(filename) -- play this video
我有一个简单的 table 可以跟踪视频文件和一个 program_id 数字,如下所示:
|--------------------|----------------|-------- ----------| |编号 |文件名 | program_id | |--------------------|----------------|-------- ----------| | 1 | vid1.mp4 | 1001 | |--------------------|----------------|-------- ----------| | 2 | vid2.mp4 | 1010 | |--------------------|----------------|-------- ----------| | 3 | vid3.mp4 | 1005 | |--------------------|----------------|-------- ----------|
我想做的是提取最低的程序 ID,然后从数据库中提取下一个最低的程序 ID。 program_id 不是线性的,因为我在它们之间插入和删除视频,因此循环代码可以提取下一个最低视频,以防添加新视频。所以在第一遍我希望期望 1001,下一遍 1005 然后下一遍 1010.
现在我成功地得到了这个,我可以在 python 中拉到最低的 program_id:
while true:
sql = "SELECT * FROM videos WHERE program_id = ( SELECT MIN(program_id) FROM video)"
cnx.execute (sql)
result = cnx.fetchall()
for qq in result:
id = qq[0]
filename = qq[1]
program_id = qq[3]
playVideo(filename)
有没有办法使用循环并使用最后一个 programn_id 和下一个最低的 select 进行另一个查询?
使用 Limit 和 offset 获取下一个视频
CREATE TABLE videos ( `id` INTEGER, `filename` VARCHAR(8), `program_id` INTEGER ); INSERT INTO videos (`id`, `filename`, `program_id`) VALUES ('1', 'vid1.mp4', '1001'), ('2', 'vid2.mp4', '1010'), ('3', 'vid3.mp4', '1005');
✓ ✓
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 0;
id | filename | program_id -: | :------- | ---------: 1 | vid1.mp4 | 1001
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 1;
id | filename | program_id -: | :------- | ---------: 3 | vid3.mp4 | 1005
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 2;
id | filename | program_id -: | :------- | ---------: 2 | vid2.mp4 | 1010
db<>fiddle here
i = 0
while true:
sql = "SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET "+str(i);
cnx.execute (sql)
result = cnx.fetchall()
for qq in result:
id = qq[0]
filename = qq[1]
program_id = qq[3]
i = i +1
playVideo(filename)
但是因为你只得到一行,所以你不需要 for 循环。
您还需要一个断点来离开 While 循环,例如当不再有行时。
我真的不明白运行使用单独的查询来获取此处每一行的意义。
您可以简单地 运行 一个查询,为您提供按递增 program_id
排序的视频,然后循环遍历 查询的结果 :
while true:
sql = "SELECT * FROM videos ORDER BY program_id"
cnx.execute (sql)
result = cnx.fetchall()
for qq in result: -- fetch each video, ordered by "programm_id"
id = qq[0]
filename = qq[1]
program_id = qq[3]
playVideo(filename) -- play this video