LINUX.ORG.RU

sqlite> insert into test (id) values (75);
sqlite> insert into test (id) values (12);
sqlite> insert into test (id) values (99);
sqlite> insert into test (id) values (1);
sqlite> select * from test;
75
12
99
1
sqlite> select * from test where id in(75,12);
75
12
sqlite> select * from test where id in(75,12,99,1);
75
12
99
1

А нет, он сортирует по rowid.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Для смеха приведу такой код:

select id from test where id in (75,12,99,1) order by (id-51)*(id-51);

А если серьезно, то надо бы больше информации раскрыть. Что за id? Зачем вообще могла понадобиться такая сортировка? Может вообще как-то иначе надо данные хранить и выборку делать.

TeopeTuK ★★★★
()
Ответ на: комментарий от AUX

Тогда выкладывай DDL для таблицы + данные, которые в ней лежат.

Ja-Ja-Hey-Ho ★★★★
()
Ответ на: комментарий от AUX

Я тебе это и написал, выборка по умолчанию будет сортирована по полю rowid.

Выполни:

select rowid,id from test where _id in (75,12,99,1)
или заводи ключ сортировки и указывай order by sortkey.

kostik87 ★★★★★
()
Ответ на: комментарий от AUX

убейся.

UPD: У меня записи вывелись в нужной последовательности потому, что я их завёл в этой последовательности, вот смотри с rowid:

sqlite> select rowid, * from test where id in(75,12,99,1);
1|75
2|12
3|99
4|1

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от AUX

Не будет по твоему порядку ни разу. SQL всё равно какой порядок указан в параметрах выбор или даже если их нет. Он выведет записи в том порядке, в котором они выберутся из базы. В sqlite у каждой записи таблицы есть поле rowid, так вот первыми выберутся строки у которых этот rowid меньше.

Теперь ясно?

Если тебе нужно по определённому порядку, то заведи отдельную таблицу, в которой сопоставь id ключ сортировки:

sqlite> select t.id from test as t join sort as s on (t.id = s.id)  where t.id in(75,12,99,1) order by s.sortkey ;
75
12
99
1
sqlite> select id,sortkey from sort;
75|10
12|20
99|30
1|40

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от AUX

Тут ведь вот, какое дело. В SQL сортировка либо задается ключом order by, либо не задается, и тогда как получится, так получится. Слово in всего лишь фильтрует выборку и никакого влияния на порядок выведенных строк не оказывает. Вот и всё.

Если нужна какая-нибудь специфическая сортировка, то надо создать для нее ключ в таблице. Иначе никак, увы.

TeopeTuK ★★★★
()
insert into test (id) values(1);
insert into test (id) values(12);
insert into test (id) values(75);
insert into test (id) values(99);

select *
from test
order by case 
		when id = 75 then 1
		when id = 12 then 2
		when id = 99 then 3
		else 4
	end;
Patrick13
()

Как отсортировать запрос?

ORDER BY smth, не?

cherry-pick
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.