猿问

在实时数据库中查找比 MYSQL 表中的最后一条记录值更高的下一个最低值

我有一个简单的表格来跟踪视频文件和一个program_id,如下所示:


|---------------------|------------------|------------------|

|      id             |    filename      |  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执行另一个查询,然后从中选择下一个最低值?


四季花海
浏览 88回答 2
2回答

qq_花开花谢_0

用于获取下一个视频的 USe 限制和偏移量CREATE TABLE videos&nbsp; (&nbsp; `id` INTEGER,&nbsp; `filename` VARCHAR(8),&nbsp; `program_id` INTEGER);INSERT INTO videos&nbsp;&nbsp; (`id`, `filename`, `program_id`)VALUES&nbsp; ('1', 'vid1.mp4', '1001'),&nbsp; ('2', 'vid2.mp4', '1010'),&nbsp; ('3', 'vid3.mp4', '1005');✓✓SELECT * FROM videos&nbsp; ORDER BY program_id ASC LIMIT 1 OFFSET 0;id | filename | program_id-: | :------- | ---------:&nbsp;1 | vid1.mp4 |&nbsp; &nbsp; &nbsp; &nbsp;1001SELECT * FROM videos&nbsp; ORDER BY program_id ASC LIMIT 1 OFFSET 1;id | filename | program_id-: | :------- | ---------:&nbsp;3 | vid3.mp4 |&nbsp; &nbsp; &nbsp; &nbsp;1005SELECT * FROM videos&nbsp; ORDER BY program_id ASC LIMIT 1 OFFSET 2;id | filename | program_id-: | :------- | ---------:&nbsp;2 | vid2.mp4 |&nbsp; &nbsp; &nbsp; &nbsp;1010db<>在这里i = 0while true:&nbsp; &nbsp; sql = "SELECT * FROM videos&nbsp; ORDER BY program_id ASC LIMIT 1 OFFSET "+str(i);&nbsp; &nbsp; cnx.execute (sql)&nbsp; &nbsp; result = cnx.fetchall()&nbsp; &nbsp; for qq in result:&nbsp; &nbsp; &nbsp; &nbsp; id = qq[0]&nbsp; &nbsp; &nbsp; &nbsp; filename = qq[1]&nbsp; &nbsp; &nbsp; &nbsp; program_id = qq[3]&nbsp; &nbsp; i = i +1&nbsp; &nbsp; playVideo(filename)但是,由于您只得到一行,因此您不需要 for 循环。此外,您还需要一个断点来离开 While 循环,例如,当不再有行时。

慕田峪9158850

我真的看不出运行单独的查询来获取此处的每一行有什么意义。您可以简单地运行单个查询,该查询为您提供按增加排序的视频,然后循环访问查询结果:program_idwhile true:&nbsp; &nbsp; sql = "SELECT * FROM videos ORDER BY program_id"&nbsp; &nbsp; cnx.execute (sql)&nbsp; &nbsp; result = cnx.fetchall()&nbsp; &nbsp; for qq in result:&nbsp; &nbsp; &nbsp; &nbsp;-- fetch each video, ordered by "programm_id"&nbsp; &nbsp; &nbsp; &nbsp; id = qq[0]&nbsp; &nbsp; &nbsp; &nbsp; filename = qq[1]&nbsp; &nbsp; &nbsp; &nbsp; program_id = qq[3]&nbsp; &nbsp; &nbsp; &nbsp; playVideo(filename) -- play this video
随时随地看视频慕课网APP

相关分类

Python
我要回答