С наступившим НГ!
Суть вопроса вот в чем:
имеется таблица в базе, в ней предположим 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 смещались, или каким-то другим путем реализовать этот процесс.
на странице у меня фотка, по бокам кнопки "Предыдущая" и "Следующая".
урл типа 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 не нравится, что малой кровью задачу не решить
Если нужны только ссылки на предыдущую и следующую, то можно что-то типа такого (псевдокод)
$prev_id = SELECT MAX(id) FROM table WHERE id<$id
$next_id = SELECT MIN(id) FROM table WHERE id>$id
Если нужны только ссылки на предыдущую и следующую, то можно что-то типа такого (псевдокод)
$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 не нравится, что малой кровью задачу не решить Если нужны только ссылки на предыдущую и следующую, то можно что-то типа такого (псевдокод) $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 написал(а):
Спасибо! Все получилось!