我有一个简单的表,可以像这样跟踪视频文件和program_id号:
| --------------------- | ------------------ | -------- ---------- || 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进行另一个查询并从中选择下一个最低值?
使用下一个视频的限制和偏移量
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 |文件名| program_id-:| :------- | ---------:1 | vid1.mp4 | 1001
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 1;
id |文件名| program_id-:| :------- | ---------:3 | vid3.mp4 | 1005
SELECT * FROM videos ORDER BY program_id ASC LIMIT 1 OFFSET 2;
id |文件名| program_id-:| :------- | ---------:2 | vid2.mp4 | 1010
db <>小提琴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