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
Форумы портала PHP.SU :: Версия для печати :: Как пересчитать доп. поле?
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как пересчитать доп. поле?

Страниц (3): [1] 2 3 »
 

1. lamozavrik - 22 Февраля, 2012 - 10:52:52 - перейти к сообщению
Привет всем. Помогите с одной штукой. В таблице есть доп поле с номером записи (это не id), номера идут по порядку, то есть 1, 2, 3, 4... Но если удалить, например, вторую запись, то получится 1, 3, 4... Так вот, как при удалении пересчитать это поле, что бы опять шло по порядку? =)
2. illy - 22 Февраля, 2012 - 11:05:27 - перейти к сообщению
при удалении 2 все записи больше 2 уменьшаем на единицу
3. Viper - 22 Февраля, 2012 - 11:08:56 - перейти к сообщению
illyзаписи не больше 2, а записи больше номера удаляемой премнумеровываем заново.
Проще в цикле сделать выборку записей с номерами больше удаляемой и сделать им update. Правда если записей много, то могут возникнуть проблемы с блокировкой(лимит кол-ва запросов) и медленностью.
4. lamozavrik - 22 Февраля, 2012 - 11:15:08 - перейти к сообщению
А более изящней решения я так понимаю нету? %)
5. LIME - 22 Февраля, 2012 - 11:19:37 - перейти к сообщению
а зачем их вообще нумеровать в базе?
может это проще делать при выводе?
6. lamozavrik - 22 Февраля, 2012 - 11:27:36 - перейти к сообщению
LIME пишет:
а зачем их вообще нумеровать в базе?
может это проще делать при выводе?

Нет. Нужно именно в базе... По ним иногда проходит выборка, а для корректной выборки нужно именно по порядку
7. LIME - 22 Февраля, 2012 - 11:31:08 - перейти к сообщению
lamozavrik пишет:
По ним иногда проходит выборка
чую что можно обойтись в выборке без них))
например выбрать с нужной сортировкой и сикнуть указатель на нужную позицию и фетчить нужное кол-во записей
8. lamozavrik - 22 Февраля, 2012 - 11:53:27 - перейти к сообщению
LIME пишет:
чую что можно обойтись в выборке без них))

Вообще то можно =) Просто выборка выбирает 9 рандомных записей...Когда числа идут по порядку без пропусков, а не так как id, то отпадает вероятность выбора пустой строки или повторяющейся строки =)
10. lamozavrik - 22 Февраля, 2012 - 12:08:13 - перейти к сообщению
EuGen, я это уже читал... В первом варианте есть вероятность повторения строки, а во втором запрос проходит по условию WHERE RAND()..., что не есть гуд (по моему) =))
11. LIME - 22 Февраля, 2012 - 12:13:05 - перейти к сообщению
чет ляпнул
12. lamozavrik - 22 Февраля, 2012 - 12:19:48 - перейти к сообщению
LIME пишет:
чет ляпнул

Что ляпнул? ))
13. Symby - 22 Февраля, 2012 - 12:23:28 - перейти к сообщению
LIME пишет:
сикнуть указатель на нужную позицию

Насчет этого можно поподробнее? Как указать указатель на нужную позицию?
14. LIME - 22 Февраля, 2012 - 12:26:05 - перейти к сообщению
ну не думаю что правильное решение но всеже
http://php.su/functions/?mysql_data_seek на рандомный ряд
всеравно сервер бд не шлет весь результат целиком клиенту
так что может подойдет
15. lamozavrik - 22 Февраля, 2012 - 12:45:45 - перейти к сообщению
Вообщем алгоритм должен быть таким:
1. Я выбираю минимальное число и максимальное число с того столбца с числами
2. Генерю девять случайных чисел от минимального до максимально (как раз тут и нужно, что бы числа шли по порядку и не было пропусков между ними)
3. Далее составляю строку из чисел вида: число1, число2, число3...
4. Делаю выборку по условию WHERE столбец_с_числами IN (составленная строка)

Как то вот так ))

 

Powered by ExBB FM 1.0 RC1