А так же при изменении сортировки. Но отдельные умные разработчики, конечно, не думают о таких вещах, как сортировка для пользователя. В зависимости от своей умности они или присирают потом какой-то еще один костыль или сетуют на тупость пользователей, которые хотят сортировать фото у себя в альбоме или, не дай бог, отсылать своим друзьям ссылку на фото, а не на абстрактную страницу с неизвесто какой фоткой. Ты считаешь это заслугой? )) Мне не понятны эти поползновения с таймстампом и т.д. Ну будешь сортировать по таймстампу, молодец, и чего? К страницам это отношения не имеет. PS: пойди уже, посмотри разные галереи, поучись, а... хватит тут гнать уже.
Поподробнее с этого момента где и когда желательно с примерами http://imageshack.us/ Пользовался? Обрати внимание на отдельный блок - ссылки для сайтов, ссылки для форумов и т.д. Вот так делают правильные люди. А не бьют по мухам из пушки
Simpliest Как в итоге ты предлагаешь организовать просмотр? Допустим мне дали ссылку на картинку. Я по ней перехожу и собираюсь листать альбом вперед/назад. 1. Ссылка: Переходим на картинку со ссылкой типа images.ru/getPic.php?img=sdsdK897JKHas9 2. Формирование картинки: ищем в базе по $img 3. Формирование ссылок: Если нет переменной "порядковый номер" то: 2 запроса - первым находим порядковый номер, вторым выбираем ссылки по порядковому номеру. Формируем ссылки на соседние картинки с указанием их порядковых номеров. иначе: 1 запрос - выбираем ссылки по порядковому номеру Формируем ссылки на соседние картинки с указанием их порядковых номеров.
Нет ничего сложного. Достаточно иметь пару соглашений и не усложнять себе жизнь. 1. Просмотр альбома и просмотр отдельного изображения это разные вещи. 2. Изображение однозначно определяется его uid или неким составным ключем (timestamp+filename+userid+albumid) - более чем достаточно. все места где надо выводить как HTML: <img src=""> используем uid Код (Text): (show.php?img=1259658983+4b5151a24a91df8c2304e36fc117dfb6+vasja+more) Все что требует следующая/предыдущая - уже последовательность (читай альбом) Код (Text): (show.php?userid=vasja&albumid=more&page=1) В результате вся задача сводится к банальнейшей пагинации. И 1му единственному запросу. Прислали ссылку - посмотрел картинку. Захотел еще - нажал рядом ссылку "просмотреть весь альбом" И смотри в свое удовольствие. Решение топикстартера и то что предлагал ты с union вполне подходят, и перекрывают недостаток моего варианта (см п.1 этого сообщения). Но у вас 3 SELECT у меня 1. А вот такое лучше не использовать вовсе (по крайней мере в галлереях) P.S. автоинкремент же в базе не обязателен. Ваши варианты запросов могли быть и такими [sql]SELECT `filename` FROM `pics_items` WHERE `upload_timestamp` + `owner` + `album` >[UPLOAD_TIMESTAMP] + [USER_ID] + [ALBUM_ID] AND `owner`=[USER_ID] AND `album`=[ALBUM_ID] ORDER BY `upload_timestamp` + `owner` + `album` ASC LIMIT 1[/sql]
Тебе дали ссылку на конкретную картинку? Значит ты смотришь не альбом. И листать ничего не сможешь. Если тебе дадут ссылку на альбом - тогда да.
Это делается для других целей. А если ты бы вместо нести свой бред пошел и посмотрел - то увидел, что ссылка на фото там так же вполне валидна (постоянна). Слушайте, идите говнокод дальше писать, не лезьте в проектирование интерфейсов - у вас это очень хреново выходит. На будущее - при просмотре большой фото в галерее - возможноть посмотреть "дальше" должна быть. Так что свои "пару соглашений" отправьте туда, откуда они вышли и, опять же, идите смотрите другие галереи (галереи, а не всякие imageshack).
Для чего там сделано - я прекрасно знаю. Я пытался лишь обратить внимание на то, как правильно и без геморроя сделать требуемый функционал. До тебя не дошло. Бывает... Возможность есть. Ссылки "дальше" нет. Я смотрю фото из галлереи. Это фото принадлежит галлерее, пользователю, альбому, каким-нибудь еще -надцати тегам. Вот с какого бодуна мне должно определить что у нас следующее? У галлерии следующей будет одна картинка, у пользователя - другая, у альбома, возможно, третья. У тегов вообще у каждого своя. А исходная картинка-то у нас одна единственная! И какая, в жопу, из них будет следующей? Черт, ну подумай хоть немного, напрягись.
Да нет, это ты не хочешь думать. Удобнее - взять URL из адресной строки и отослать его друзьям. Именно так все и делают, и ты именно так делаешь, когда хочешь послать ссылку на статью, на фото и т.д. и т.п. Это нормальная реакция человека, и если ты будешь утверждать, что в первую очередь ищешь на странице блок "ссылка на это фото" - то ты или врун или идиот. Далее, в альбомах все фото сформированы по одному признаку. Это или событие, или тематика. Именно по-этому такая штука называется альбомом. Человеку, который смотрит фото из альбома очень интересно посмотреть как минимум следующее фото. Предыдущее тоже бывает, хоть и реже. И не должно быть никакой разницы - открыл он эту страницу с фото из альбома или пришел на это фото по внешней ссылке. Это, опять же, нормальная человеческая реакция. Если мы говорим о разделении последовательностей - например, по тегам, эта информация так же может быть заложена в URL - почему нет? /album/1234/photo/54321 и /tag/лето/photo/54321 - вот тебе и информация для определения последовательности. Сложно? Нет. Удобно - да. Вот что называется думать. Т.е. смотреть поведенческие реакции людей, как им удобно. Но никак не сажать Simpliest-а и заставлять его фантазировать на тему "чо б нам навернуть". Еще раз - не пытайся строить из себя уника, иди учись - программист, который научится думать не кодом, а бизнесом - следующий шаг для него. Банально, посмотри другие галереи, прошу же.
Пошел смотреть яднекс http://fotki.yandex.ru/tag/%D0%BE%D1%81 ... ew/119801/ http://fotki.yandex.ru/users/bsn8330/view/119801/ Приятно, умеют люди думать, не удивительно, в общем. Полагаю, одна из немногих контор, которая умеет "интерфейсы думать". Пусть, порой, и с помощью студии Лебедева.
Код (Text): function getNearTitles($ouid){ $this->result=array(); $prepare=sprintf(' (select artists.artist,reviews.album, reviews.ouid from artists, reviews where artists.id=reviews.id and reviews.ouid < \'%s\' order by reviews.ouid desc limit 0,1) union (select artists.artist,reviews.album, reviews.ouid from artists, reviews where artists.id=reviews.id and reviews.ouid > \'%s\' order by reviews.ouid limit 0,1) order by ouid',$ouid,$ouid); $query=$this->db-> query($prepare); foreach($query->result() as $row) $this->result[]=array('ouid'=>$row->ouid,'artist'=>$row->artist,'title'=>$row->album); return $this->result; } Вот так вот делал на своей страничке с рецензиями...[/code]