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 :: Как пересчитать доп. поле? [2]
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 22 Февраля, 2012 - 14:30:33
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
EuGen но ведь от тормозов сплошного апдейта большой базы это не поможет
EuGen
Отправлено: 22 Февраля, 2012 - 14:34:23
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
LIME
Это ответ на вопрос о перенумерации. Вопроса об оптимальности здесь не стоит. Да и какая может быть вообще оптимальность у такой задачи в общем случае? Если нужно перенумеровать, так в любом случае придется затронуть всю таблицу (что и происходит - как пример - в укзанном мною способе).
Дело другое, если есть некоторая логика и можно следить за нумерацией. но и тогда ситуация лишь немногим лучше - при сдвигании первых по номеру строк ситуация будет примерно такая же (то есть при перенумерации будет затронуто почти все множество строк).
По поводу рандомной выборки некоторого числа строк я приводил ссылки, но если важно быстродействие именно БД, можно просто выгрузить все id таблицы в массив и выбрать из него с помощью http://php.su/functions/?array_rand - это если не жалко памяти, расходуемой в скрипте.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 22 Февраля, 2012 - 14:39:41
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
EuGen пишет:
Вопроса об оптимальности здесь не стоит.
lamozavrik пишет:
но тут тогда возникает еще вопрос... На сколько будет медленным UPDATE, если после удаляемой строки идет большое количество записей?
EuGen пишет:
можно просто выгрузить все id таблицы в массив
а можно сиками переходить на рандомные ряды и фетчить только их в цикле
насколько я знаю большие результирующие таблицы приходят как-то не целиком
поэтому не будет память захламляться
EuGen
Отправлено: 22 Февраля, 2012 - 14:52:02
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Ах да, теперь вижу. Ну, в первоначальной формулировке задача так не ставилась, а я, должно быть, пропустил.
Если использовать mysql_data_seek - то нужно будет все равно генерировать случайную выборку неповторяющихся значений смещения. Это, разумеется, быстрее, чем делать запрос к БД наподобие того, что предложил я выше.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
lamozavrik
Отправлено: 22 Февраля, 2012 - 15:16:18
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
Пока что всем спасибо )) Ушел думать )) Как что придумаю, отпишу )
----- Ударим крепким сном по мукам совести!
lamozavrik
Отправлено: 22 Февраля, 2012 - 17:44:41
Частый гость
Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011
Помог: 4 раз(а)
Короче так, от доп поля я отказался и придумал другое решение на пыхе для вывода уникальных рандомных строк =))
Собственно вот, выставляю на ваш суд ))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.