За последние 24 часа нас посетили 18168 программистов и 1661 робот. Сейчас ищут 1740 программистов ...

Выбор трех записей - текущей, предыдущей и следующей

Тема в разделе "PHP и базы данных", создана пользователем aswind, 17 ноя 2009.

  1. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А так же при изменении сортировки. Но отдельные умные разработчики, конечно, не думают о таких вещах, как сортировка для пользователя. В зависимости от своей умности они или присирают потом какой-то еще один костыль или сетуют на тупость пользователей, которые хотят сортировать фото у себя в альбоме или, не дай бог, отсылать своим друзьям ссылку на фото, а не на абстрактную страницу с неизвесто какой фоткой.
    Ты считаешь это заслугой? ;)))
    Мне не понятны эти поползновения с таймстампом и т.д. Ну будешь сортировать по таймстампу, молодец, и чего? К страницам это отношения не имеет.

    PS: пойди уже, посмотри разные галереи, поучись, а... хватит тут гнать уже.
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Поподробнее с этого момента :) где и когда :) желательно с примерами :)

    http://imageshack.us/
    Пользовался? :) Обрати внимание на отдельный блок - ссылки для сайтов, ссылки для форумов и т.д. :)
    Вот так делают правильные люди.

    А не бьют по мухам из пушки
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Simpliest
    Как в итоге ты предлагаешь организовать просмотр?
    Допустим мне дали ссылку на картинку. Я по ней перехожу и собираюсь листать альбом вперед/назад.
    1. Ссылка:
    Переходим на картинку со ссылкой типа images.ru/getPic.php?img=sdsdK897JKHas9
    2. Формирование картинки:
    ищем в базе по $img
    3. Формирование ссылок:
    Если нет переменной "порядковый номер" то:
    2 запроса - первым находим порядковый номер, вторым выбираем ссылки по порядковому номеру.
    Формируем ссылки на соседние картинки с указанием их порядковых номеров.
    иначе:
    1 запрос - выбираем ссылки по порядковому номеру
    Формируем ссылки на соседние картинки с указанием их порядковых номеров.
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Нет ничего сложного. Достаточно иметь пару соглашений и не усложнять себе жизнь.

    1. Просмотр альбома и просмотр отдельного изображения это разные вещи.
    2. Изображение однозначно определяется его uid или неким составным ключем
    (timestamp+filename+userid+albumid) - более чем достаточно.
    все места где надо выводить как
    HTML:
    1. <img src="">
    используем uid
    Код (Text):
    1. (show.php?img=1259658983+4b5151a24a91df8c2304e36fc117dfb6+vasja+more)
    Все что требует следующая/предыдущая - уже последовательность (читай альбом)
    Код (Text):
    1. (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]
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Тебе дали ссылку на конкретную картинку? Значит ты смотришь не альбом. И листать ничего не сможешь.

    Если тебе дадут ссылку на альбом - тогда да.
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Это делается для других целей. А если ты бы вместо нести свой бред пошел и посмотрел - то увидел, что ссылка на фото там так же вполне валидна (постоянна).
    Слушайте, идите говнокод дальше писать, не лезьте в проектирование интерфейсов - у вас это очень хреново выходит. На будущее - при просмотре большой фото в галерее - возможноть посмотреть "дальше" должна быть. Так что свои "пару соглашений" отправьте туда, откуда они вышли и, опять же, идите смотрите другие галереи (галереи, а не всякие imageshack).
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Для чего там сделано - я прекрасно знаю. Я пытался лишь обратить внимание на то, как правильно и без геморроя сделать требуемый функционал. До тебя не дошло. Бывает...

    Возможность есть. Ссылки "дальше" нет.

    Я смотрю фото из галлереи.

    Это фото принадлежит
    галлерее, пользователю, альбому, каким-нибудь еще -надцати тегам.

    Вот с какого бодуна мне должно определить что у нас следующее? У галлерии следующей будет одна картинка, у пользователя - другая, у альбома, возможно, третья. У тегов вообще у каждого своя.
    А исходная картинка-то у нас одна единственная!

    И какая, в жопу, из них будет следующей?

    Черт, ну подумай хоть немного, напрягись.
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Да нет, это ты не хочешь думать. Удобнее - взять URL из адресной строки и отослать его друзьям. Именно так все и делают, и ты именно так делаешь, когда хочешь послать ссылку на статью, на фото и т.д. и т.п. Это нормальная реакция человека, и если ты будешь утверждать, что в первую очередь ищешь на странице блок "ссылка на это фото" - то ты или врун или идиот.

    Далее, в альбомах все фото сформированы по одному признаку. Это или событие, или тематика. Именно по-этому такая штука называется альбомом. Человеку, который смотрит фото из альбома очень интересно посмотреть как минимум следующее фото. Предыдущее тоже бывает, хоть и реже. И не должно быть никакой разницы - открыл он эту страницу с фото из альбома или пришел на это фото по внешней ссылке. Это, опять же, нормальная человеческая реакция.

    Если мы говорим о разделении последовательностей - например, по тегам, эта информация так же может быть заложена в URL - почему нет? /album/1234/photo/54321 и /tag/лето/photo/54321 - вот тебе и информация для определения последовательности. Сложно? Нет. Удобно - да.

    Вот что называется думать. Т.е. смотреть поведенческие реакции людей, как им удобно. Но никак не сажать Simpliest-а и заставлять его фантазировать на тему "чо б нам навернуть". Еще раз - не пытайся строить из себя уника, иди учись - программист, который научится думать не кодом, а бизнесом - следующий шаг для него. Банально, посмотри другие галереи, прошу же.
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
  10. Lugburz

    Lugburz Активный пользователь

    С нами с:
    26 дек 2009
    Сообщения:
    2
    Симпатии:
    0
    Код (Text):
    1.  
    2. function getNearTitles($ouid){
    3.         $this->result=array();
    4.         $prepare=sprintf('
    5. (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)
    6. union
    7. (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);
    8.         $query=$this->db->
    9.         query($prepare);
    10.             foreach($query->result() as $row)
    11.                 $this->result[]=array('ouid'=>$row->ouid,'artist'=>$row->artist,'title'=>$row->album);
    12.             return $this->result;
    13.     }
    Вот так вот делал на своей страничке с рецензиями...[/code]