2014-11-28 1 views
2

У меня есть база данных Sq Lite 3, которая имеет идентификаторы столбцов, имя и время. Итак, у меня есть последняя строка и помещается в var LAST_PERSON с использованием python.Сравнение в Sq Lite 3 Python

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 

Но я не могу использовать операторы if для Sq Lite 3 и я не могу найти никакого решения для сравнения это. Можете ли вы дать мне щелчок?

Если вы не можете, спасибо, не тратя время на чтение.

+0

Ваш код питон не правильно отступом и, следовательно, недействительным. Вы неправильно описываете, чего хотите достичь.Скорее всего, это можно сделать с помощью одного оператора SQL, но невозможно узнать, какой из них, потому что вы не объясняете, что вы пытаетесь сделать. – wvdz

ответ

1

Вы хотите select count(ID) from rank where time < your_time или аналогичные.

Результаты поиска по SQL, чтобы узнать, что вы хотите, неудобно, когда вы можете просто запросить базу данных, чтобы дать вам ответ, который вы хотите.

Edit:

Ваш первый запрос, где вы присоединитесь таблицу к себе, чтобы заставить пользователя с наибольшим 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, предположив, что вы действительно выполнили ваш SQL-запрос your_rank и сохранил результат сверху, в том же имени переменной, после чего он завершился неудачно, потому что 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 
+0

Спасибо, ваш ответ работает отлично :) – user3650234

Смежные вопросы