[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Следующая фотография
asandp
Здравствуйте.
С наступившим НГ!

Суть вопроса вот в чем:
имеется таблица в базе, в ней предположим 10 записей, соответственно каждой записи присвоен id заполняющийся auto_increment. Удалили например запись с id 8, получается в таблице 9 записей, с id 1,2,3,4,5,6,7,9,10
А как сделать так, чтобы удаляя запись, все последующие id смещались? чтобы в данном примере осталось 9 записей с id 1,2,3,4,5,6,7,8,9

Помогите пожалуйста, никак не додумаюсь.



Спустя 51 минута, 39 секунд (4.01.2010 - 16:20) twin написал(а):
Не надо этого делать. Автоинкремент для того и придуман, что бы записи были снабжены уникальными идентификаторами. Плоследовательность тут нужно организовывать несколько иначе, не трогая значение поля id.

Спустя 33 минуты, 51 секунда (4.01.2010 - 16:54) asandp написал(а):
мне вообще зачем это надо:
на странице у меня фотка, по бокам кнопки "Предыдущая" и "Следующая".
урл типа foto.php?id=4
а кнопка "Следующая" имеет ссыль:

$id = $_GET['id'];
$next_id = $id+1;

и потом

print "<a href=foto.php?id=".$next_id.">Следующая</a>";

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

Спустя 30 минут, 51 секунда (4.01.2010 - 17:25) ApuktaChehov написал(а):
Можно попробовать выгрузить все записи сразу в массив и работать с массивом.
А если записей много, выгружать частями. Типа постраничный вывод делать.

Ну, это то что в голову пришло.

Спустя 2 минуты, 53 секунды (4.01.2010 - 17:28) twin написал(а):
А как решается вопрос с последней? Все равно наступит момент, когда будет запрошен несуществующий id.
Нужно формировать ссылку из имеющихся идов или можно попробовать в лоб, поставив в запрос условие
"SELECT ....... WHERE `id` >= ". (int)$id ." LIMIT 1"


Спустя 5 минут, 23 секунды (4.01.2010 - 17:33) VolCh написал(а):
Вот чем мне MySQL не нравится, что малой кровью задачу не решить sad.gif

Если нужны только ссылки на предыдущую и следующую, то можно что-то типа такого (псевдокод)

$prev_id = SELECT MAX(id) FROM table WHERE id<$id
$next_id = SELECT MIN(id) FROM table WHERE id>$id

Спустя 1 минута, 27 секунд (4.01.2010 - 17:35) asandp написал(а):
Цитата (twin @ 4.01.2010 - 14:28)
А как решается вопрос с последней? Все равно наступит момент, когда будет запрошен несуществующий id.
Нужно формировать ссылку из имеющихся идов или можно попробовать в лоб, поставив в запрос условие
"SELECT ....... WHERE `id` >= ". (int)$id ." LIMIT 1"

хм, кстати, а вот это похоже мысль!
С массивами я тоже думал, это лишние загрузки, лишний тормоз системы.
А вот если поставить в запрос где id больше нынешнего, и условие загрузки только одной записи... да, думаю получится! чуть позже попробую отпишусь что как! Спасибо огромное!

Спустя 1 минута, 27 секунд (4.01.2010 - 17:36) asandp написал(а):
Цитата (VolCh @ 4.01.2010 - 14:33)
Вот чем мне MySQL не нравится, что малой кровью задачу не решить sad.gif

Если нужны только ссылки на предыдущую и следующую, то можно что-то типа такого (псевдокод)

$prev_id = SELECT MAX(id) FROM table WHERE id<$id
$next_id = SELECT MIN(id) FROM table WHERE id>$id

ну, тоже вариант, и добавить еще LIMIT 1, на всякий )

Спустя 1 час, 32 секунды (4.01.2010 - 18:37) glock18 написал(а):
MIN, MAX решение более экономное для сервера, чем с LIMIT. если верить explain, а он говорит правду в 95% случаев.

Спустя 3 дня, 21 час, 4 минуты, 59 секунд (8.01.2010 - 15:42) asandp написал(а):
Цитата (twin @ 4.01.2010 - 14:28)
А как решается вопрос с последней? Все равно наступит момент, когда будет запрошен несуществующий id.
Нужно формировать ссылку из имеющихся идов или можно попробовать в лоб, поставив в запрос условие
"SELECT ....... WHERE `id` >= ". (int)$id ." LIMIT 1"

Вот пробывал вот так вот. но только вместо >= поставил просто >. потому как запрос всегда выводил одно и тоже, а именно где =, а не больше, и потом просто условие что если то что вышло равно ничему то переменная = существующему id, а иначе переменная равна тому что вышло из запроса. Вперет у меня получилось так двигать. А назад... не знаю почему не получается. Вот запрос:
$past_id_query = mysql_query("SELECT * FROM foto WHERE id < '$get_foto_id' and album_id = '$get_album_number' LIMIT 1;");

Спустя 3 минуты, 12 секунд (8.01.2010 - 15:45) VolCh написал(а):
добавь ORDER BY id DESC перед LIMIT

Спустя 29 минут, 48 секунд (8.01.2010 - 16:15) asandp написал(а):
Спасибо! Все получилось!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.