Sqlite странный порядок сортировки - PullRequest
1 голос
/ 21 июня 2011

Вот интересный, он происходит только с одним файлом базы данных, а не с любым другим, который у меня есть. Я вылечил эту проблему, но подумал, что это довольно интересно.

У меня есть таблица -

<partial table>
CREATE TABLE [horsestats] (
[horseID] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
[name] VARCHAR(30)  NULL,
[flatrating] INTEGER DEFAULT '0' NULL
);

Все нулевые значения в таблице установлены по умолчанию, любые другие были установлены моим программным обеспечением. Около 70% записей имеет набор значений. Итак, если мы запустим это -

Select horsestats.flatrating FROM horsestats WHERE horsestats.flatrating<>0 ORDER BY horsestats.flatrating DESC LIMIT 20;

Мы на самом деле не ожидаем этого -

flatrating
0
0
0
etc

На самом деле перечислены только значения, равные 0, ни одно из значений, отличных от нуля, не выводится Если мы обратим его, мы можем ожидать, что в списке будут указаны только значения, отличные от 0:

Select horsestats.flatrating FROM horsestats WHERE horsestats.flatrating=0 ORDER BY horsestats.flatrating DESC LIMIT 20;

Но нет, записи не возвращаются.

Так что же нам дает этот (это место, где я начал, потому что это первый набор, который нужен моему программному обеспечению):

Select horsestats.flatrating FROM horsestats  ORDER BY horsestats.flatrating DESC;

Могу поспорить, твои носки ты угадаешь неправильно. Он получает это:

flatrating
0
0
0
0
130
128
127
126
125
124
124

Как я уже сказал, этого не происходит ни с какой другой базой данных или таблицей, которые у меня есть. Я собираюсь исправить это сейчас, неявно устанавливая все значения от нуля до нуля, я подозреваю, что это исправит это.

На самом деле это не так, если я бегу:

UPDATE horsestats SET horsestats.flatrating='0' WHERE horsestats.flatrating='0';

Проблема остается, поэтому мне кажется, что я должен записать этот файл базы данных как поврежденный. В этом случае это нормально, потому что мне приходится загружать большинство данных из других источников в предзагрузке программного обеспечения.

Итак, вопрос Почему?

Может ли Sqlite сделать странную смесь анси и числовой сортировки? Это единственное, что я могу придумать, чтобы задать такой порядок сортировки, но также нулевое значение в этой таблице не кажется численно нулевым, хотя оно ведет себя, как и ожидалось, после его передачи в мое программное обеспечение.

1 Ответ

0 голосов
/ 21 июня 2011

Я думаю, что ваша проблема в том, что вы цитируете ноль - это делает его строкой. составить таблицу так:

CREATE TABLE [horsestats] (
[horseID] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
[name] VARCHAR(30)  NULL,
[flatrating] INTEGER DEFAULT 0 NULL
);

и похоже на работу. в качестве альтернативы, запустите версию вашей команды update без кавычек:

UPDATE horsestats SET horsestats.flatrating=0 WHERE horsestats.flatrating='0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...