Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как пересчитать доп. поле?
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
Привет всем. Помогите с одной штукой. В таблице есть доп поле с номером записи (это не id), номера идут по порядку, то есть 1, 2, 3, 4... Но если удалить, например, вторую запись, то получится 1, 3, 4... Так вот, как при удалении пересчитать это поле, что бы опять шло по порядку? =)
----- Ударим крепким сном по мукам совести!
illy
Отправлено: 22 Февраля, 2012 - 11:05:27
Участник
Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011 Откуда: от верблюда)
Помог: 28 раз(а)
при удалении 2 все записи больше 2 уменьшаем на единицу
----- Всё гениальное - просто
И ещё проще, если ты - индиго
Viper
Отправлено: 22 Февраля, 2012 - 11:08:56
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
illyзаписи не больше 2, а записи больше номера удаляемой премнумеровываем заново.
Проще в цикле сделать выборку записей с номерами больше удаляемой и сделать им update. Правда если записей много, то могут возникнуть проблемы с блокировкой(лимит кол-ва запросов) и медленностью.
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
А более изящней решения я так понимаю нету? %)
----- Ударим крепким сном по мукам совести!
LIME
Отправлено: 22 Февраля, 2012 - 11:19:37
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
а зачем их вообще нумеровать в базе?
может это проще делать при выводе?
lamozavrik
Отправлено: 22 Февраля, 2012 - 11:27:36
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
LIME пишет:
а зачем их вообще нумеровать в базе?
может это проще делать при выводе?
Нет. Нужно именно в базе... По ним иногда проходит выборка, а для корректной выборки нужно именно по порядку
----- Ударим крепким сном по мукам совести!
LIME
Отправлено: 22 Февраля, 2012 - 11:31:08
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
lamozavrik пишет:
По ним иногда проходит выборка
чую что можно обойтись в выборке без них))
например выбрать с нужной сортировкой и сикнуть указатель на нужную позицию и фетчить нужное кол-во записей
lamozavrik
Отправлено: 22 Февраля, 2012 - 11:53:27
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
LIME пишет:
чую что можно обойтись в выборке без них))
Вообще то можно =) Просто выборка выбирает 9 рандомных записей...Когда числа идут по порядку без пропусков, а не так как id, то отпадает вероятность выбора пустой строки или повторяющейся строки =)
----- Ударим крепким сном по мукам совести!
EuGen
Отправлено: 22 Февраля, 2012 - 12:00:44
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
lamozavrik
Отправлено: 22 Февраля, 2012 - 12:08:13
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
EuGen, я это уже читал... В первом варианте есть вероятность повторения строки, а во втором запрос проходит по условию WHERE RAND()..., что не есть гуд (по моему) =))
----- Ударим крепким сном по мукам совести!
LIME
Отправлено: 22 Февраля, 2012 - 12:13:05
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ну не думаю что правильное решение но всеже http://php.su/functions/?mysql_data_seek на рандомный ряд
всеравно сервер бд не шлет весь результат целиком клиенту
так что может подойдет
lamozavrik
Отправлено: 22 Февраля, 2012 - 12:45:45
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
Вообщем алгоритм должен быть таким:
1. Я выбираю минимальное число и максимальное число с того столбца с числами
2. Генерю девять случайных чисел от минимального до максимально (как раз тут и нужно, что бы числа шли по порядку и не было пропусков между ними)
3. Далее составляю строку из чисел вида: число1, число2, число3...
4. Делаю выборку по условию WHERE столбец_с_числами IN (составленная строка)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.