Форум → Программирование → PHP для идиотов → Выборка информации о следующем и предыдущем элементе.
Выборка информации о следующем и предыдущем элементе.
Страницы: ← Следующая страница →
-
Здрасьте.
Чет затупил, не могу придумать как это сделать. На ум приходят решения где нужно до 3х запросов к БД =(
в общем есть таблица элементов
[table]
[tr]
[td]id[/td]
[td]name[/td]
[td]url[/td]
[/tr]
[tr]
[td]1[/td]
[td]какашка[/td]
[td]kakashka[/td]
[/tr]
[tr]
[td]2[/td]
[td]мусорка[/td]
[td]musorka[/td]
[/tr]
[tr]
[td]3[/td]
[td]карандаш[/td]
[td]karandash[/td]
[/tr]
[tr]
[td]4[/td]
[td]кошка[/td]
[td]koshka[/td]
[/tr]
[/table]
нам известно url, допустим musorka
нужно выбрать данные о первом, втором и третьем элементе.
если url равно koshka то нужно выбрать третий, четвертый и первый элементы.
Нужно это для того что бы ссылочки поставить "следующий элемент" и "предыдущий элемент"
Жду ваших мыслей по данному вопросу. -
Авг. 7, 2010, 10:40 д.п., спустя 9 минут 14 секунд
есть такая идея… если айдишники в нормальном порядке буду, то есть без прерываний (что мало вероятно), то можно попробовать так:SELECT * FROM table WHERE id={$id-1} LIMIT 3
что-нить типа такого))Высокоуровневое абстрактное говно -
-
Авг. 7, 2010, 11:19 д.п., спустя 28 минут 23 секунды
смахивает на постраничную навигацию может быть её переделать под "следующий элемент" и "предыдущий элемент"
а $nums (кол-во записей, выводимых на страницу) поставить 1 -
Авг. 7, 2010, 11:31 д.п., спустя 12 минут 1 секунду
(SELECT MIN(t.id) AS target,t.* FROM table t HAVING t.id = target) UNION (SELECT 1,t.* FROM table t WHERE t.id < 10 ORDER BY t.id DESC LIMIT 1) UNION (SELECT 1,t.* FROM table t WHERE t.id > 10 LIMIT 1)
вместо 10 - твой ID страницы -
Авг. 7, 2010, 12:10 п.п., спустя 38 минут 40 секунд
Faster, научи такие космические запросы штамповать))Высокоуровневое абстрактное говно -
Авг. 7, 2010, 12:10 п.п., спустя 19 секунд
tartar, нет, это не то что нужно. хотя можно под это переделать.
Faster, спасибо конечно, но это те же 3 запроса -
-
Авг. 7, 2010, 12:23 п.п., спустя 4 минуты 7 секунд
Faster, научи такие космические запросы штамповать))
ничего космического, обычный UNION - в констексте вопроса дает выигрыш на соединение с БД (1 вместо 3)
кстати я так и не понял зачем зацикливать на первую запись, если нет следующей -
Авг. 7, 2010, 12:25 п.п., спустя 2 минуты 18 секунд
кстати я так и не понял зачем зацикливать на первую запись, если нет следующей
согласен, это лишний гемор…Высокоуровневое абстрактное говно -
Авг. 7, 2010, 12:25 п.п., спустя 14 секунд
походу фейл.
Могу предложить в два запроса. Сам запрос писать не буду ибо херова знаю все эти юнионы и джойны, но по сути примерно так:
Сначала узнаем id предыдущего элемента (типа SELECT id FROM page WHERE id < 10 LIMIT 1 ORDER BY ASC) и потом получить три записи id которых больше или равно полученому -
Авг. 7, 2010, 12:29 п.п., спустя 3 минуты 39 секунд
кстать, действительно проще будет, если добавить столбик с временем создания, по нему искать предыдущий, а дальше либо моим способом, либо еще каким))
я, конечно, не настаиваю, что мой способ ниипаццо крут, но мне кажется, что довольно просто))Высокоуровневое абстрактное говно -
-
Авг. 7, 2010, 12:40 п.п., спустя 58 секунд
да так, мысли вслух)) не обращай внимания))Высокоуровневое абстрактное говно -
Авг. 7, 2010, 12:53 п.п., спустя 12 минут 57 секунд
В общем как сделал я
$sql = $this->db->query("SELECT * FROM `home` ORDER BY id");
while ($row = mysqli_fetch_assoc($sql)) {
if ($url == $row["url"]) {
$homePrev = $homePrevTrap;
$infoAll = $row;
}
if ($url == $homePrevTrap) {
$homeNext = $row["url"];
break;
}
$homePrevTrap = $row["url"];
}
и того получается что в переменной $infoAll хранится информация о нужной странице
В переменных $homePrev и $homeNext ссылки на предыдущий и следующий элементы соответственно.
Зацикливание пришлось убрать =)
Вот терь думаю может как SpartakuS, посоветовал 2мя запросами сделать?
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!