Форум → Программирование → PHP для идиотов → Выборка информации о следующем и предыдущем элементе.
Выборка информации о следующем и предыдущем элементе.
Страницы: ← Предыдущая страница →
-
Авг. 8, 2010, 11:31 д.п., спустя 39 минут 45 секунд
artoodetoo, ух как много написал =) рад что задачка понравилась. Теперь разъясню некоторые моменты.
1) да URL уникальны, но сортировка объектов происходит по `id`(можно и другое поле, но никак не`url`)
2) зачем `url` в базе хранить? Может я чегото не понимаю или неправильно делаю? Тогда просветите пожалуйста=)
Есть адрес http://mysite.ru/informacionaya-stranica , дык вот, как мне узнать информацию об этой информационной странице? или айдишник передавать?
http://mysite.ru/13
Ну не красиво же
3) в выборке нужна информация о нашей странице и о 2х окружающих ее. У окружающих нужно только url -
Авг. 8, 2010, 12:11 п.п., спустя 40 минут 11 секунд
если делать как я то при 100000 строк в базе скрипт выполняетсяСделано за: 1.54928517342 секунд
-
Авг. 8, 2010, 3: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ι унц-унц -
Авг. 8, 2010, 3:16 п.п., спустя 9 минут 13 секунд
p.s. я понял. ты называешь урлом не весь урл, а просто транслитерированную версию name. ну ты умеешь усложнить себе жизнь. попросил бля хлебушка!
типа чтобы удобно было искать. только это не URL. назови его token чтоли или translit_name! :) всё что я написал выше остается в силе.ιιlllιlllι унц-унц -
Авг. 8, 2010, 3:24 п.п., спустя 7 минут 32 секунды
Вы можете назвать меня говнокодером. Но я бы сделал так:<?php
$id = $db->getOne("SELECT `id` FROM `pages` WHERE `url` = '$url' LIMIT 1");
$prev = $db->getOne("SELECT `url` FROM `pages` WHERE `id` < '$id' ORDER BY asc LIMIT 1");
$next = $db->getOne("SELECT `url` FROM `pages` WHERE `id` > '$id' ORDER BY desc LIMIT 1");
if ($prev) {
echo "<a href = '/$prev'>Предыдущий</a>";
}
if ($next) {
echo "<a href = '/$next'>Следующий</a>";
} -
Авг. 8, 2010, 3:33 п.п., спустя 9 минут 54 секунды
гений! подумай что будет если наша запись первая или последняяιιlllιlllι унц-унц -
Авг. 8, 2010, 3:52 п.п., спустя 18 минут 53 секунды
artoodetoo,<?php
/**
* Первая норм
* Последняя норм
*/
$id = $db->getOne("SELECT `id` FROM `pages` WHERE `url` = '$url' LIMIT 1");
/**
* Первая предыдущий нет. Получаем пустой результат
* Последняя норм
*/
$prev = $db->getOne("SELECT `url` FROM `pages` WHERE `id` < '$id' ORDER BY asc LIMIT 1");
/**
* Первая норм
* Последняя пустой результат иб слдущей нет
*/
$next = $db->getOne("SELECT `url` FROM `pages` WHERE `id` > '$id' ORDER BY desc LIMIT 1");
/**
* Первая - выведет только следущий ибо предыдущий пустой и приведется к bool типу false. Я не проверял, ну если что можено заюзать empty()
* Последняя - выдаст только предыдущий.
* Остальные - выведет оба линка.
*/
if ($prev) {
echo "<a href = '/$prev'>Предыдущий</a>";
}
if ($next) {
echo "<a href = '/$next'>Следующий</a>";
} -
Авг. 8, 2010, 4:08 п.п., спустя 15 минут 54 секунды
ну хз. мне как-то не по себе видеть три SQL запроса, где можно обойтись одним. дело вкусаιιlllιlllι унц-унц -
Авг. 18, 2012, 9:52 п.п., спустя 741 день 5 часов 43 минуты
Некоторые люди почему - то считают себя колдунами и экстрасенсами. -
Авг. 18, 2012, 10:25 п.п., спустя 33 минуты 43 секунды
Эээээ что-бы понравилось? По любому в твоем возрасте каждый день что-то меняется
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!