ФорумПрограммированиеPHP для идиотов → Выборка информации о следующем и предыдущем элементе.

Выборка информации о следующем и предыдущем элементе.

  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 8 августа 2010 г. 0:31, спустя 39 минут 45 секунд

    artoodetoo, ух как много написал =) рад что задачка понравилась. Теперь разъясню некоторые моменты.

    1) да URL уникальны, но сортировка объектов происходит по `id`(можно и другое поле, но никак не`url`)
    2) зачем `url` в базе хранить? Может я чегото не понимаю или неправильно делаю? Тогда просветите пожалуйста=)
    Есть адрес http://mysite.ru/informacionaya-stranica , дык вот, как мне узнать информацию об этой информационной странице? или айдишник передавать?
    http://mysite.ru/13
    Ну не красиво же
    3) в выборке нужна информация о нашей странице и о 2х окружающих ее. У окружающих нужно только url
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 8 августа 2010 г. 1:11, спустя 40 минут 11 секунд

    если делать как я то при 100000 строк в базе скрипт выполняется
    Сделано за: 1.54928517342 секунд
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 8 августа 2010 г. 4:07, спустя 2 часа 55 минут 49 секунд

    полторы секунды это дофига!


    1) да URL уникальны, но сортировка объектов происходит по `id`(можно и другое поле, но никак не`url`)

    значит ORDER BY оставляешь по id

    2) зачем `url` в базе хранить? Может я чегото не понимаю или неправильно делаю? Тогда просветите пожалуйста=)
    Есть адрес http://mysite.ru/informacionaya-stranica , дык вот, как мне узнать информацию об этой информационной странице? или айдишник передавать?
    http://mysite.ru/13
    Ну не красиво же

    судя по твоей таблице из первого поста, url это производная от поля name. значит хранить URL не надо

    3) в выборке нужна информация о нашей странице и о 2х окружающих ее. У окружающих нужно только url

    1. какой-то "роутер" должен по входящему URL вычислить соответствующую запись в таблице. не будем вникать как. значит у тебя будет нужная запись вместе с id !!!
    2. дальше про next и previous я написал. ну добавь во внешний запрос name чтобы было удобно вычислять урлы
    SELECT id, name…
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 8 августа 2010 г. 4:16, спустя 9 минут 13 секунд

    p.s. я понял. ты называешь урлом не весь урл, а просто транслитерированную версию name. ну ты умеешь усложнить себе жизнь. попросил бля хлебушка!
    типа чтобы удобно было искать. только это не URL. назови его token чтоли или translit_name! :) всё что я написал выше остается в силе.
    ιιlllιlllι унц-унц
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 8 августа 2010 г. 4:24, спустя 7 минут 32 секунды

    Вы можете назвать меня говнокодером. Но я бы сделал так:
    <?php
    $id = $db->getOne(&quot;SELECT `id` FROM `pages` WHERE `url` = &#39;$url&#39; LIMIT 1&quot;);
    $prev = $db->getOne(&quot;SELECT `url` FROM `pages` WHERE `id` < &#39;$id&#39; ORDER BY asc LIMIT 1&quot;);
    $next = $db->getOne(&quot;SELECT `url` FROM `pages` WHERE `id` > &#39;$id&#39; ORDER BY desc LIMIT 1&quot;);
    if ($prev) {
    echo &quot;<a href = &#39;/$prev&#39;>Предыдущий</a>&quot;;
    }
    if ($next) {
    echo &quot;<a href = &#39;/$next&#39;>Следующий</a>&quot;;
    }
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 8 августа 2010 г. 4:33, спустя 9 минут 54 секунды

    гений! подумай что будет если наша запись первая или последняя
    ιιlllιlllι унц-унц
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 8 августа 2010 г. 4:52, спустя 18 минут 53 секунды

    artoodetoo,
    <?php
    /**
    * Первая норм
    * Последняя норм
    */
    $id = $db->getOne(&quot;SELECT `id` FROM `pages` WHERE `url` = &#39;$url&#39; LIMIT 1&quot;);
    /**
    * Первая предыдущий нет. Получаем пустой результат
    * Последняя норм
    */
    $prev = $db->getOne(&quot;SELECT `url` FROM `pages` WHERE `id` < &#39;$id&#39; ORDER BY asc LIMIT 1&quot;);
    /**
    * Первая норм
    * Последняя пустой результат иб слдущей нет
    */
    $next = $db->getOne(&quot;SELECT `url` FROM `pages` WHERE `id` > &#39;$id&#39; ORDER BY desc LIMIT 1&quot;);
    /**
    * Первая - выведет только следущий ибо предыдущий пустой и приведется к bool типу false. Я не проверял, ну если что можено заюзать empty()
    * Последняя - выдаст только предыдущий.
    * Остальные - выведет оба линка.
    */
    if ($prev) {
    echo &quot;<a href = &#39;/$prev&#39;>Предыдущий</a>&quot;;
    }
    if ($next) {
    echo &quot;<a href = &#39;/$next&#39;>Следующий</a>&quot;;
    }
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 8 августа 2010 г. 5:08, спустя 15 минут 54 секунды

    ну хз. мне как-то не по себе видеть три SQL запроса, где можно обойтись одним. дело вкуса
    ιιlllιlllι унц-унц
  • Voronenok

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 10:52, спустя 741 день 5 часов 43 минуты

    Некоторые люди почему - то считают себя колдунами и экстрасенсами.
  • Barbos

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 11:25, спустя 33 минуты 43 секунды

    Эээээ что-бы понравилось? По любому в твоем возрасте каждый день что-то меняется
  • 16 января 2017 г. 1:50, спустя 1611 дней 15 часов 24 минуты

    Пользователь был удалён, сообщения недоступны


Пожалуйста, авторизуйтесь, чтобы написать комментарий!