«Центрирование» MySQL результат - PullRequest
2 голосов
/ 11 ноября 2011

Я пытаюсь создать фотогалерею в php + mysql.

URL viewphoto.php? Id = 143 показывает фотографию 143. В меню навигации я хочу отобразить две предыдущие фотографии в этомальбом, и следующие два.

Я подумал об использовании:

$temp_id = $id - 2;
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id >= {$temp_id} LIMIT 5");

Но это не сработало, потому что фотографии из разных альбомов могут иметь идентификаторы, предшествующие и следующие за одним из просмотренных.

Кто-нибудь знает, как я мог это сделать?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 11 ноября 2011

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

Либо используйте отдельный индексный столбец для сортировки в одном альбоме.Этот индекс может быть легко перестроен в случае удаления изображения.

Или вы определяете столбец «предыдущий» и «следующий» в вашей таблице.Это будет содержать идентификатор последнего и следующего изображения.Если изображение удаляется, вам нужно всего лишь изменить эти столбцы для предыдущего и следующего изображения.

Используя оба метода, вы можете, например, использовать вложенное самостоятельное объединение для доступа к своим предыдущим и следующим 2 изображениям.Прокомментируйте этот пост, если вам нужна помощь.

4 голосов
/ 11 ноября 2011

Я сам занимался этой проблемой и никогда не находил элегантного решения проблемы, в итоге я сделал это в двух запросах:

// next
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id > {$id} ORDER BY id ASC LIMIT 2");

// prev
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id <= {$id} ORDER BY id DESC LIMIT 3");

Теперь первым выбранным элементом в "prev" будет текущая фотография.

Это решение должно быть дополнено проверкой того, что первый элемент в "prev" фактически является запрошенным идентификатором, потому что он не гарантирует, что это правильный идентификатор, в случае пробелов в серии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...