我有一个Sq Lite 3数据库,其中包含列ID,名称和时间。 所以我有最后一行并使用python放置在var LAST_PERSON中。
your_rank = "SELECT usr_name,time FROM rank WHERE ID = (SELECT MAX(ID) FROM rank)"
我还有一个var ROW,它按时间顺序遍历每一行。
sql = "SELECT usr_name,time FROM rank ORDER BY time "
for row in cur.execute(sql):
我想比较一下:
your_rank,按时间排序,获得最后一个人的排名
我试过
for row in cur.execute(sql):
sql_list.append(row)
if(row is your_rank):
this_is_your_rank = rank_number
rank_number += 1
但我不能使用Sq Lite 3的if语句,我无法找到任何比较这些的解决方案。你能点击一下吗?
如果你不能,谢谢你花时间阅读。
答案 0 :(得分:1)
您想select count(ID) from rank where time < your_time
或类似。
当您可以要求数据库为您提供所需的答案时,循环查看SQL结果以找出您想要的东西是笨重的。
编辑:
您的第一个查询,您将表连接到自身以获取具有最高ID的用户,可以是:
SELECT MAX(ID),usr_name,time FROM rank
您可以将它们组合在一起,以“获取最新的用户名,时间和位置”:
SELECT
MAX(ID),usr_name,time, (SELECT COUNT(ID)+1 FROM rank WHERE time < r.time) [Pos]
FROM
rank r
再次编辑,好吧好的。不是“任何人都可以给我一个解决方案吗?”,我不清楚你的意思是“我不能使用if语句”,但这里有一些推测:
如果您实际键入row is your_rank
,假设您实际执行了your_rank SQL查询并将结果保存在同一变量名称的顶部,那么它会失败,因为is
是用于测试的Python关键字是否两件事是同一件事(也就是说,有一件事有两个名字)。它不测试两个单独的事物是否具有相同的值。 ==
是相等测试。
它也可能失败,因为SQL查询的结果实际上是元组列表。每个row
都是一个元组,并且根据您将结果放在your_rank
中所做的操作,它们在比较时不会匹配。
如果您想保持相同的方法,这可能会有效:
last_user = cursor.execute('select max(id),usr_name,time from rank').fetchone()
last_user_rank = 1
for row in cursor.execute('select id,usr_name,time from rank order by time asc'):
if last_user[2] > row[2]:
last_user_rank += 1
else:
break
print last_user, last_user_rank