|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Подскажите, если в sqlite аналог Оракловой ROWNUM ? Хочу, чтобы возвращало следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2010, 16:01 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
В SQLite есть несколько псевдонимов для внутреннего счетчика, например, ROWID ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2010, 16:05 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
он совпадает с primary key и не обязательно будет с шагом 1. также я могу добавить сортировку, к примеру, по дате. А на выходе всё равно нужно получить равномерный список Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2010, 16:09 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Так бы и сказали, что счетчик нужен: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Правда, в дефолтовой сборке этой функции, насколько я помню, нет. Нужно в исходниках ее раскомментировать и перекомпилировать или загрузить расширением. Или просто application defined функцию подключить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2010, 20:42 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
я на фришном хостинге с sqlite2 что-либо перекомпилировать или подгружать не могу. если application defined функция имелась ввиду такая, которая создаётся с помощью sqlite3_create_function, то опять не смогу по той же причине. К тому же с С не знаком :) за ответ спасибо. по крайней мере стало ясно, что такая функция существует в природе ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 04:47 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Tolka если application defined функция имелась ввиду такая, которая создаётся с помощью sqlite3_create_function, то опять не смогу по той же причине. К тому же с С не знаком :) application defined функции можно создавать на любом языке, в этом вся их прелесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 12:37 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Можно и без них, на простом SQL-92 Если можно однозначно отсортировать строки, то их можно и пронумеровать. Но по хорошему, нумерацию строк надо делать на клиенте а не на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 17:29 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
White Owlна клиенте а не на сервере. И кто тут сервер ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 18:00 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Dmitry ArefievWhite Owlна клиенте а не на сервере. И кто тут сервер ? :)Тот кто выполняет sql команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 19:09 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
White OwlНо по хорошему, нумерацию строк надо делать на клиенте а не на сервере. Если нумерация нужна только для отображения, то да. Можно и на клиенте. Хотя опять таки спорный вопрос. В случае с Ораклом, все стараются делать в базе, благо возможности есть. Клиент только отображает. В моём случае, присвоенный номер элементу списка, предварительно отсортированного в определённом порядке, является значением бизнес-логики. И оно должно сохранятся в базе. 2 MBG, я могу представить, что я пишу функцию, которая принимает на вход значение (это будет значение колонки, или любое выражение), делает вычисления и возвращает результат Код: plaintext 1. 2.
а мне нужен счётчик... как я определю внутри функции, для какой по счёту строки она вызывается? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 22:39 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
White OwlТот кто выполняет sql команды. И в случае статически прилинкованного sqlite, кто тут сервер ? :) Да в общем все зависит от определений и точки зрения на вещи ... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2010, 23:36 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Dmitry ArefievWhite OwlТот кто выполняет sql команды. И в случае статически прилинкованного sqlite, кто тут сервер ? :) Да в общем все зависит от определений и точки зрения на вещи ...Хорошо. SQL это информационный язык. Нумерация строк это последовательный проход по множеству. Последовательный проход намного проще сделать в процедурном языке чем в информационном. Так устроит? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 00:37 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Dmitry ArefievWhite OwlТот кто выполняет sql команды. И в случае статически прилинкованного sqlite, кто тут сервер ? :) Да в общем все зависит от определений и точки зрения на вещи ... http://ru.wikipedia.org/wiki/СерверСервер (от англ. server, обслуживающий): Сервер (программное обеспечение) — программное обеспечение, принимающее запросы от клиентов. Может и отдельная функция в приложении сервером называться, с точки зрения английского языка это вполне естественно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 11:36 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Tolka а мне нужен счётчик... как я определю внутри функции, для какой по счёту строки она вызывается? Ваш язык программирования не содержит функции инкремента? :-) Если содержит, то заводите глобальную переменную и увеличиваете ее значение на 1 при каждом вызове функции (функция возвращает текущее значение этой переменной). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 11:41 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
MBGМожет и отдельная функция в приложении сервером называться, с точки зрения английского языка это вполне естественно. Ну эдак можно дойти до того, что локальная переменная - сервер. Принимает запросы на инкремент и выполняет их :) В мире СУБД под сервером подразумевается чаще всего несколько иное ... Так что это больше про термины. А вообще - СУБД подготавливает набор записей, который по определению порядка не имеет, так как есть множество. СУБД создает и возвращает курсор, который есть итератор над этим множеством. И к итератору уже применимо - номер элемента. Обычно API СУБД не предоставляет явное API для получения номера записи в курсоре. Неявно - очень часто. Тот же PGSQL - по номеру записи возвращает данные. Про SQLite - его (ее ?) API не предоставляет такой информации. Т.е. по большому делу это дело пользователя курсора - нумеровать элементы получаемые из итератора. Примерно так ... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 17:42 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
6119Dmitry Arefiev Т.е. по большому делу это дело пользователя курсора - нумеровать элементы получаемые из итератора. Примерно так ... Учитывая, что эскулайт работает в адресном пространстве пользователя, такое разделение не имеет смысла :-) В противном случае извольте называть эскулайт сервером ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2010, 20:10 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Клиент/сервер или встроенная СУБД - это на тему архитектуры, вопроса обслуживания. А курсор - это на тему API доступа к резалтсетам. Курсоры могут использоваться, а могут и нет, независимо от используемой архитектуры. Примеров полно ... PS: Эко на офтопили :) PS2: А что такое 6119 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2010, 08:59 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Когда писал предыдущее сообщение, думал о том, что в случае веб-приложения клиент видит веб-сервис, одним из компонентов которого является эскулайт; фактически, в этом случае эскулайт - сервер. А пронумеровать записи можно даже яваскриптом в браузере - притом понятия курсора здесь вовсе нет, снова оперируем с множеством. Так что отсутствие номера записи в курсоре эскулайт вполне логично - в общем случае не нужен он там. Впрочем, это и в самом деле оффтопик, хотя нюанс интересный. Dmitry ArefievPS2: А что такое 6119 ? Капчу не туда вбил :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2010, 14:17 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Написал функцию, но при использовании оказалось, что она не является аналогом оракловой ROWNUM. Также обнаружился один новый, для меня, момент с LIMIT Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
1) сортировка результирующего набора выполняется ПОСЛЕ вычисления функции. В Oracle наоборот. И это, по-моему, логично. Я хочу пронумеровать то, что я получил в итоге, после проведения всех операций над множеством. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
обратите внимание на значения row_num 2) при добавлении LIMIT отсечение происходит ПОСЛЕ сортировки. Т.е. он вытаскивает ВСЕ строки из таблицы. Делает их сортировку и потом возвращает указаное в LIMIT значение. Я думал, что он выберет первые N строк и только потом их отсортирует. Опять таки, так сделано в Oracle и так, по-моему, логичней. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
3) при попытке переписать запросы в виде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
с целью получить значения row_num начинающиеся с 1, результаты получались идентичными первым двум случаям ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2010, 15:09 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
Нужно делать сортированный подзапрос, я когда-то этот вопрос подробно описывал: http://sqlite.mobigroup.ru/src/wiki?name=ext_auxfunc См. описание для функции distincton ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2010, 17:17 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
MBG, Почитал про distincton. Так я же тоже делал сортированный подзапрос. См. п. 3 моего предыдущего поста. Не помогло. Он высчитал мою функцию ДО операции сортировки ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2010, 18:17 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
TolkaMBG, Почитал про distincton. Так я же тоже делал сортированный подзапрос. См. п. 3 моего предыдущего поста. Не помогло. Он высчитал мою функцию ДО операции сортировки Хм, я же вроде ясно описал ситуацию - нужно _две_ совпадающие сортировки, в основном запросе и в подзапросе, т.е. ваш запрос Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2010, 02:01 |
|
псевдо-колонка ROWNUM
|
|||
---|---|---|---|
#18+
сорри за некропост таки да. дополнительная сортировка решила проблему Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2010, 15:14 |
|
|
start [/forum/topic.php?fid=54&fpage=25&tid=2009284]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 167ms |
0 / 0 |