Перемещение по записям в запросе
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?
что значит переместится? выборка сделанная оператором SELECT в общем случае неупорядочена. так что 12 строка не всегда 12я.
что значит переместится? выборка сделанная оператором SELECT в общем случае неупорядочена. так что 12 строка не всегда 12я.
Допустим я отсортировал по дате при помощи ORDER BY, и мне требуется только 12-я строка(Первую или последнюю запись я найти смогу с помощью TOP(LIMIT)).
Допустим я отсортировал по дате при помощи ORDER BY, и мне требуется только 12-я строка(Первую или последнюю запись я найти смогу с помощью TOP(LIMIT)).
от СУБД зависит. это не ANSI SQL.
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?
А кто является клиентом ?
Если программируешь на Borland то там это достаточно легко.
Выборку просмотрел, тыкнул в нужные записи и обработал их, также можно реализовать и в другом интерфейсе, например таблице сгенерированной в PHP. Отмеченные записи будут обработаны. А до возвращенного запроса никому не известно кто будет 12-м. Да и SQL сервер на то и SQL, чтоб сетевые запросы клиентов удовлетворять, так что пока вы запрос строите, другой клиент уже может три добавил.
Чтобы переместиться к записи в курсоре, опять же в чём (каком клиенте)?
А кто является клиентом ?
Если программируешь на Borland то там это достаточно легко.
Выборку просмотрел, тыкнул в нужные записи и обработал их, также можно реализовать и в другом интерфейсе, например таблице сгенерированной в PHP. Отмеченные записи будут обработаны. А до возвращенного запроса никому не известно кто будет 12-м. Да и SQL сервер на то и SQL, чтоб сетевые запросы клиентов удовлетворять, так что пока вы запрос строите, другой клиент уже может три добавил.
Чтобы переместиться к записи в курсоре, опять же в чём (каком клиенте)?
Вообще-то я пишу на ODBC API, база Sybase7(урезанная)
вот кусок кода:
//****
strcpy(strSQL,"SELECT V FROM Table");
retcode=SQLExecDirect(hstmt1,(SQLCHAR*) strSQL,SQL_NTS);
nResult = SQLFetch(hstmt1);
nResult = SQLGetData(hstmt1, 1,SQL_DEFAULT ,&value,0, &nBytes );
printf(" %2f,%2f \r\n ",value,nBytes);
в переменную value заносится результат выборки(первая запись в выборке), а мне нужна 12-я сверху.Поля с порядковым номером у меня нет.
Вообще-то я пишу на ODBC API, база Sybase7(урезанная)
вот кусок кода:
//****
strcpy(strSQL,"SELECT V FROM Table");
retcode=SQLExecDirect(hstmt1,(SQLCHAR*) strSQL,SQL_NTS);
nResult = SQLFetch(hstmt1);
nResult = SQLGetData(hstmt1, 1,SQL_DEFAULT ,&value,0, &nBytes );
printf(" %2f,%2f \r\n ",value,nBytes);
в переменную value заносится результат выборки(первая запись в выборке), а мне нужна 12-я сверху.Поля с порядковым номером у меня нет.
хм... не вижу смысла в такой выборке. проще придумать условие по которому будет выбираться 12я строка. можете попробовать выбирать по уникальному полю строки (ключу), либо почитать доки на Sybase, возможно там есть служебное поле, наподобие Oracle rownum
хм... не вижу смысла в такой выборке. проще придумать условие по которому будет выбираться 12я строка. можете попробовать выбирать по уникальному полю строки (ключу), либо почитать доки на Sybase, возможно там есть служебное поле, наподобие Oracle rownum
В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь
В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь
а зачем менять? служебные поля и есть служебные поля. а таблиц без уникальных атрибутов не бывает. наличие уникального столбца (пусть даже неявного - обязательное требование к любой таблице реляционных СУБД.
а зачем менять? служебные поля и есть служебные поля. а таблиц без уникальных атрибутов не бывает. наличие уникального столбца (пусть даже неявного - обязательное требование к любой таблице реляционных СУБД.
Уникальное поле-это дата/время,но я к нему не могу привязаться
В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь
Не каждая база поддерживает Move, но скорее всего она будет поддерживать MoveNext, тогда сделав 12 раз MoveNext ты будешь на 12 строке.
Не каждая база поддерживает Move, но скорее всего она будет поддерживать MoveNext, тогда сделав 12 раз MoveNext ты будешь на 12 строке.
А как мне это сделать средствами SQL?
А как мне это сделать средствами SQL?
именно средствами ANSI SQL - ИМХО никак. только специфическими функциями или полями СУБД.
именно средствами ANSI SQL - ИМХО никак. только специфическими функциями или полями СУБД.
Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.
Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.
Очень интересно.А можно пример?
Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.
это ANSI? или все же специфическое от какой либо СУБД?
это ANSI? или все же специфическое от какой либо СУБД?
так как это было достаточно давно, точно утверждать не могу, но он точно использовался в FoxPro
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?
Для перемещения по записям результата запроса можно использовать курсор.
Для определения курсора:
SELECT *
FROM Table
Это определение курсора не является исполняемым для запроса, он только определяет структуру будущего множества записей.
Для выполнения запроса и создания множества записей используй оператор OPEN.
Для перемещения по указателя на следующую строку используй оператор FETCH. Он перемещает указатель текущей строки на следующую и присваивает базовым переменным значения столбцов, соответсвующих текущей строке
В расширенном варианте оператор FETCH допустимо перемещаться сразу на заданную строку, при этом допустима как абсолютная, так и относительная адресация.
Оператор закрытия курсора имеет простой синтаксис и выглядит следующим образом: