фотоальбом

dorfey

Guest
фотоальбом

Всем привет. прошу подсказать принцип реализации фотоальбома. необходимо следующее:
Реализовать переход на страницу вперед и назад.

Сейчас просто беру текущий Id +1 это следующая страница, предыдущая соответсвенно будет Id -1. Все было хорошо пока из таблицы не удалил несколько фоток, в результате появились "дыры". Предполагаю что выходов из этой ситуации два. Первый: найти функцию которая будет выбирать из таблицы следующий id, и при наличии дырки будет ее просто обходить.
Второй: После удаления фотки делать переиндексацию таблицы, не могу найти как это релизовать.
Большая просьба помочь.
 

Фанат

oncle terrible
Команда форума
выход один.
находить запросом нужный id
и совсем не обязательно это будет следующий по порядку
 

rotoZOOM

ACM maniac
Вариантов несколько.
1. Переиндексация (чего сложного ?)

2. Онлайн поиск следующего и предыдущего элемента минуя дыры
Код:
SELECT MIN(id) AS nextid FROM mycooldb WHERE id>$currentid
SELECT MAX(id) AS nextid FROM mycooldb WHERE id<$currentid
3. Геморройно но вариант (скорее всего гуру порвут на тряпки). Завести еще два поля в таблице, означающее след. элемент и пред. элемент. И при удалении текущей записи корректировать в соседних эти поля. Как связанные двусторонние списки.
Таким образом ты всегда по текущей записи сможешь найти и след. и предыдущую.
 

vedeney

Новичок
Усложняем!
фотки в одной таблице, альбомы в другой, так что ID+1 может и не быть элементом из нужного альбому.
 

dorfey

Guest
Фанат
Я зам уже понял что выход из ситуации решается простым запросом. )))
Вот только пока не совсем понимаю как сформулировать этот запрос, что бы он обходил "дыры".
Может дашь небольшую подсказку???
 

Фанат

oncle terrible
Команда форума
во-первых, такого понятия, как "дыры", в принципе не существует.
В тот момент, когда ты это поймешь, ты научишься работать с базой и поймешь, чем она отличается от набора счётных палочек.

-~{}~ 19.01.05 15:02:

rotoZOOM
гуру порвут тебя на тряпки не только за третий вариант, но в основном - за первый.

-~{}~ 19.01.05 15:04:

dorfey
собственно, есдинственное, что тебе нужно - это формализовать понятие "следующий".
именно этого ты от нас и хочешь здесь - чтобы мы за тебя формализовали.
 

dorfey

Guest
Фанат
Я это понимаю поэтому "дыры" у меня в кавычках, следовательно условный термин. Я смотрю ты дельных советов довать не умеешь!!! )))
 

Фанат

oncle terrible
Команда форума
ты хочешь обсудить мою персону?
с удовольствием об этом поговорим.
Да и твоя - тоже, как я понимаю, не идеальна.
приступим

-~{}~ 19.01.05 15:08:

а там, глядишь, модератор топик прикроет за флейм.

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

А дельный совет - это тот, который у тебя хватит ума понять.
А если ума не хватит - значит, не дельный?

-~{}~ 19.01.05 15:10:

но, допустим, дельных советов давать я не умею.
прекрасно.
Значит, тебе придётся довольствоваться бездельными.
Причём я их тебе буду давать. грамотно. в отличие от тебя, двоечника

-~{}~ 19.01.05 15:11:

Рассмотрим такой аспект.
А кто ты вообще такой, чтобы судить - умею я что-либо, или нет?

-~{}~ 19.01.05 15:16:

Я это понимаю поэтому "дыры" у меня в кавычках, следовательно условный термин
этого термина - ни условного, ни безусловного нету.
И тебе надо немного более реально смореть на уровень своих микроскопических знаний.
если тебе сказали, что не понимаешь - надо не оправдываться в стиле "Летают, но низэнько-низэнько", а задуматься - а что же тебе сказали-то вообще? Если не понял - переспросить.

Повоторяю, для особо одарённых.
Никаких дыр в результате, возвращаемом бд, нет и быть не может. и обходить нечего.

-~{}~ 19.01.05 15:17:

вот тебе материал для размышлений: PHP FAQ: MySQL.
 

untied

Сдвинутый новичок
Кхе... Дыры какие-то в таблицах, переиндексации, отдельные поля для "следующий"-"предыдущий"... Ну вообще!

Автор! Что мешает тебе сделать запрос всех id's фотографий и сохранить их в массиве? Потом определить нужную страницу (т.е. отрезок массива) и вывести фотографии именно из этого отрезка.

SELECT photo_id FROM tab_photos ORDER BY photo_date DESC
 

untied

Сдвинутый новичок
Фанат, а это уже была подкинута идея для автора... Выводить фотки по страницам, в виде превьюшек. ;)

Да. Тут сейчас спорить начнут, что разом все id's прочитать -- это долго и много получится. Ну, во-первых, я не думаю, что у автора фоток много запихается в такой фотоальбом. А во-вторых, в фотоальбом (обычно, исходя из моего опыта) фотки кидаются не всем скопом, в одну кучу, а по разделам (типа: "Где я был летом"). И в одном разделе фотографий редко собирается больше 100-200.

Запрос тогда будет выглядеть так:

SELECT photo_id FROM tab_photos WHERE group_id = ... ORDER BY photo_date DESC
 

Фанат

oncle terrible
Команда форума
Фанат, а это уже была подкинута идея для автора... Выводить фотки по страницам, в виде превьюшек.
ты просто не въехал, что автору надо.
и настроил на этом основании глупых фантазий
Да. Тут сейчас спорить начнут, что разом все id's прочитать -- это долго и много получится
с тобой спорить никто не собирается.
в таких случаях просто крутят пальцем у виска и тихо отходят в сторону.

в фотоальбом (обычно, исходя из моего опыта) фотки кидаются не всем скопом, в одну кучу, а по разделам (типа: "Где я был летом"). И в одном разделе фотографий редко собирается больше 100-200.
200 фотографий - тоже много.
при том, что сделать постраничный вывод не составляет ни малейшей проблемы - с группами или без.

при том, что постраничный вывод альбома ни малейшего отноешиня к данному вопросу не имеет
 

untied

Сдвинутый новичок
Это запрос 200 идентификаторов большой? Массив из 200 значений большой? Фанат, не смеши мои тапочки!
 

Фанат

oncle terrible
Команда форума
да ты, дуралей, вообще никого не понимаешь.
сам с собой разговариваешь.
ну беседуй, блаженный.
автор давно сбежал, так что резвись.
может, в зоопарк возьмут
 

specialist

Guest
если правильно понял,то есть таблица альбомов album_tbl вида

id | album_name | another_info
и таблица фоток photo_tbl
вида
id | photo_name | album_id | another_info

для постраничной навигации юзай запросы типа
SELECT * FROM photo_tbl WHERE album_id='.$some_digit.' LIMIT '.$step.' , '.$limit.';
 

dorfey

Guest
Фанат
Я не сбежал, пытался осмыслить поставленную задачу. Решение оказалось очень простым.

PHP:
$NextPage=mysql_query("SELECT id FROM table WHERE id>текущего_id ORDER BY id LIMIT 1");

$PrevPage=mysql_query("SELECT id FROM table WHERE id<текущего_id ORDER BY id DESC LIMIT 1");
 

Фанат

oncle terrible
Команда форума
dorfey , все правильно, только сортировка бывает не только по айди.
Именно это я и имел в виду. Что ни айди, ни дыры к общему, принципиальнму решению задачи отношения не имеют.

Сенсей, specialist, а вы, друзья, по доброй традиции, так и не въехали, в задачу увидев единственное знакомое слово - СТРАНИЦА, и рассуждая совсем не в тему.
Ники вы ребята, себе выбрали... дай бог каждому.
 

specialist

Guest
ФАНАТ
...specialist, а вы, друзья, по доброй традиции, так и не въехали, в задачу увидев единственное знакомое слово - СТРАНИЦА, и рассуждая совсем не в тему.
Ники вы ребята, себе выбрали... дай бог каждому.
Как вопрос задали, так и въехали.
Ну видимо тебе не дал... и как ты сам ,наверное, понимаешь спецами не рождаются - ими становятся....друг....
 

dorfey

Guest
Фанат
Я тебя не совсем понял, как еще возможно это реализовать???
Помоему мой вариант максимально прост и удобен.
 
Сверху