Итак, у меня есть код, который я использую с Sqlite3:

c.execute("SELECT * FROM (SELECT userid, RANK() OVER (ORDER BY Level DESC) AS Level FROM users) a WHERE userid = 267410788996743168;")

Здесь ничего не возвращается, почему? Я пытаюсь (по команде) получить позицию пользователя в базе данных на основе определенного столбца. (например, Youre ranked 120 out of 5382 users.) Есть ли более простой способ добиться этого, или мне следует исправить параметр?

0
averwhy 28 Сен 2020 в 18:01

1 ответ

Лучший ответ

Если этот пользователь действительно существует, то единственный способ не получить никаких результатов - это если фактическое значение, которое у вас есть в таблице, будет содержать пробелы, поскольку вы определили столбец как TEXT.
Попробуйте преобразовать значение в целое число:

SELECT * 
FROM (SELECT userid, RANK() OVER (ORDER BY Level DESC) AS Level FROM fishyusers) a 
WHERE userid + 0 = 267410788996743168;

Или путем обрезки значения и сравнения со строкой:

SELECT * 
FROM (SELECT userid, RANK() OVER (ORDER BY Level DESC) AS Level FROM fishyusers) a 
WHERE TRIM(userid) = '267410788996743168';

Если это удастся, вам следует обновить таблицу, чтобы удалить начальные или конечные пробелы из столбца userid:

UPDATE fishyusers
SET userid = TRIM(userid);
2
forpas 28 Сен 2020 в 15:45