На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> запрос select , выцепить i-тую запись
    Есть запрос select * from articles limit 5 ORDER BY mdate DESC
    это выдаст 5 последних записей.

    но если я хочу добыть себе 1000-ную запись?

    можно конечно получить все записи, а потом из них выбрать 1000-ную, но это ведь жутко неоптимально...
      Вводи дополнительное поле. Логика работы всех серверных баз данных исключает обращение к записи по номеру, тому много причин. Самый оптимальный вариант введение в таблицу дополнительного поля с номером записи, автоинкрементом, GUID или просто цифрой, и Select по этому полю.
        вариант Vit'а прокатит, но MySQL - это Наш СКУль! wink.gif В нем все можно сделать по-нашему! cool.gif
        CODE

        select * from articles limit 999, 1 ORDER BY mdate

        LIMIT offset, entries здесь offset - смещение (сколько записей пропустить; если не указать, то 0), а в entries - число записей, которые нужно вернуть.
          Этой _фишкой_ mySQL делает все ? (mSQL не всчет) остальные СУБД!
            2Alpha
            круто, спасибо.
            попробуюsmile.gif
              2Sazabis: нет, конечно! Уж и пошутить-то нельзя, до того все серьезные.... Злые вы, уйду я от вас :`(
                а где еще можно LIMIT проюзать ??
                  в смысле - где? вроде, кроме MySQL -нигде! smile.gif
                  или для каких задач? wink.gif чаще всего применяется для создания форумов/гостевых/новостных страничек, т.е. где есть разбиение на несколько страниц, а значит, нужна инфа ОТ и ДО smile.gif
                    ну так я и написал что mySQL делает всех smile.gif
                    почему "нет конечно" ?

                    я когда делал вэб интерфейс для MSSQL базы ( в первый раз ) долго понять не мог как мне выборку сразу за 2 страницу получить smile.gif, пришлось курсор в холостую передвигать smile.gif, хорошо что хотябы TOP х есть cool.gif
                      QUOTE (Sazabis @ 20.11.03, 04:38)
                      почему "нет конечно" ?

                      Необходимость использования обращения к определённой строке является недоработкой программиста, идеология клиент-серверных приложений не предусматривает такой возможности. Архитектура базы данных должна быть такой чтобы этот вопрос никогда не возникал. Если он возникает, то это говорит не о недостатках баз данных (в большинстве своём действительно не имеющие такой возможности), а о неопытности программиста и недостаточно продуманной архитектуре базы.
                        2Vit

                        есть таблица со звонками абонентов, у одного их может быть 10 у другого 10000, надо вывести на экран, обычную html-ю, с инфой: звонок - время - куда - ... .

                        Разумеется поддерживаются всяческие ограничения, по времени например, но в любом случае на страницу может быть вывалено более N записей. где N критичное для сервера число, например по соображениям времени формирования запроса ( У браузера есть период, после которого он может выдать page not found ).

                        Да взять какой нибудь раздел ТУТ, тоже переключатели по страницам. Если писать проги с использованием ADOQuery, к примеру, то на страницы, относительно, можно положить.

                        Может на форуме каждая страница имеет свой id ? чтобы записи возвращались без ограничений на кол-во, и при каждом удалении id пересчитывается ?, и при изменении кол-ва отображаемых постов на странице, конкретным пользователем, пересчитываются id страниц для него? Как теория ответит на эти вопросы ?
                          Записи нумеруются (т.е. в таблице есть автоинкремент), далее выбираются только номера по критерию - у тебя есть результат запроса в виде таблицы состоящей только из одного поля - номеров запроса, когда тебе надо выбрать реальные данные - ты выбираешь на основе этой таблицы...
                            Цитата
                            Записи нумеруются (т.е. в таблице есть автоинкремент), далее выбираются только номера по критерию - у тебя есть результат запроса в виде таблицы состоящей только из одного поля - номеров запроса, когда тебе надо выбрать реальные данные - ты выбираешь на основе этой таблицы...


                            Непонял, 1 раз выбираю id ? куда то в темп, или во вложенный запрос ?, а затем уже ... что ?

                            можно поподробней, действительно интересно, если это работает.
                              Просто хранишь открытым результат запроса (к сожалению MySQL довольно чахлый сервер и создание View не поддерживает) поэтому остальные операции делаются в коде. В более развитых базах данных целесообразно сделать View из выбранных Id - тогда это View можно использовать в последующих кверях - во всяком случае это практически единственный нормальный выход для MS SQL Server? который не поддерживает обращение к произвольной записи.
                                Ну можно INTO #temp сделать, это в общем понятно. мне дальше не понятно получил я записи, единственное что я могу сказать про них что они идут по порядку id, и id не дублируются, но идут не подряд конечно.
                                скажем:
                                <id>
                                2
                                5
                                7

                                8
                                14
                                23

                                34
                                35
                                37

                                40
                                55

                                Это вся выборка, мне надо получить 2 страницу - одна страница три записи. Как их достать ? на ум приходят только извраты smile.gif
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0362 ]   [ 15 queries used ]   [ Generated: 27.04.24, 09:51 GMT ]