为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2022-09-13 19:34:52
我有一个简单的表格来跟踪视频文件和一个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执行另一个查询,然后从中选择下一个最低值?
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

用于获取下一个视频的 USe 限制和偏移量


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<>在这里


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 循环,例如,当不再有行时。


查看完整回答
反对 回复 2022-09-13
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我真的看不出运行单独的查询来获取此处的每一行有什么意义。


您可以简单地运行单个查询,该查询为您提供按增加排序的视频,然后循环访问查询结果: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


查看完整回答
反对 回复 2022-09-13
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信