Цикл while в mysql

Univers

Новичок
Была задача заменить часть php кода на mysql.
Код создаёт рандомное имя для файла и записывает в таблицу, но если такое имя есть, то заново генерирует имя и записывает....

Таблица:
id(PRIMARY), filename(UNIQUE)-varchar(могут быть и буквенные значения)

Было:
PHP:
for(;;){
$var=rand(1,99999);
$test=mysql_result(mysql_query("SELECT COUNT(id) FROM table WHERE filename=$var LIMIT 1"),0);
if($test==0) mysql_query("INSERT INTO table VAUES (NULL,$var)");break;
}
Сделал:
PHP:
do{
mysql_query("INSERT IGNORE INTO `tmp` VALUES(NULL,FLOOR(1 + (RAND() * 999999)))");}
while(mysql_insert_id())
Вопросы:
1. Как избавиться от php-цикла? Можно ли сделать подобное на mysql?
2. Можно ли рандомное значение во втором примере сразу сохранить в переменную php? Или разве что, сразу после цикла с инсертом - делать select с insert_id? Хочется минимум телодвижений/максимум производительности.
3. Во втором примере производительность лучше, чем в первом? Как оптимизировать?
4. Как сделать буквенное рандомное значение в mysql с ограниченным кол-вом знаков?
 

Фанат

oncle terrible
Команда форума
Сначала ты ответь.
Была задача заменить часть php кода на mysql.
Где была? Откуда взялась?
Код создаёт рандомное имя для файла
Для чего создает? Почему рандомное?
Как избавиться от php-цикла? Можно ли сделать подобное на mysql?
Зачем?
Во втором примере производительность лучше, чем в первом? Как оптимизировать?
Проблемы с производительностью есть? Если нет - зачем решать несуществующие проблемы?
 

Univers

Новичок
Где была? Откуда взялась?
Задача для себя - сделать участок кода максимально mysql_ным, для самообразования)

Для чего создает? Почему рандомное?
При заливке файлов, если указано имя файла, то пишем его, если нет, то генерируем случайное число от 111 до 999999.

Проблемы с производительностью есть? Если нет - зачем решать несуществующие проблемы?
Мысль верна, но знать нужно, авось, пригодится когда-либо. К тому-же, если мои догадки о том, что mysql всё это быстрее сделает - верны, то почему бы не стремится к совершенству сейчас, чем когда это срочно потребуется?
 

Фанат

oncle terrible
Команда форума
Задачи для себя надо и решать самому.

Авось никогда не пригождается.
Знание, полученное на основе не опыта, а фантазий, никакой пользы не принесет.
Только вред.

Хочешь уникальное имя файла - делай md5 от содержимого.
 

Univers

Новичок
Задачи для себя надо и решать самому.
Обратиться за советом вполне нормально, решать всё и вся самому - плохая привычка. Мнение со стороны - ценная штука.
Авось никогда не пригождается.
Знание, полученное на основе не опыта, а фантазий, никакой пользы не принесет.
Только вред.
А вот и пригодится. Знания без опыта, пусть и поверхностно, но оседают в голове. Часто бывает, что при решении новой задачи в мыслях всплывают образы более-менее связанные с задачей, что помогает облегчить поиск конечного решения. А как-же теория - основа учебного процесса?
Не улучшать свой код прежде, чем он начнёт загибаться, так-же дурно, как и питаться плохой пищей, пока не схватишь язву.

Хочешь уникальное имя файла - делай md5 от содержимого.
На данном примере хочу рассмотреть числовой вариант и вставку записи с проверенно несуществующим значением.
 

Фанат

oncle terrible
Команда форума
решать всё и вся самому - плохая привычка.
хорошая
Обратиться за советом вполне нормально
Ради бога.
С практическим осмысленным вопросом - всегда рады.
Если же вопрос высосан от скуки из пальца - оттуда же и ответ добывай.
 

Univers

Новичок
Что за вредность... "мы вам не поможем, т.к. источник вашего вопроса нам не понравился".
Вопрос не из скуки, а из постоянного стремления улучшить свой движок сайта и его компоненты. Совершается как улучшение практически используемого объекта, так и знания предмета.
Ладно, всего хорошего.
 

Фанат

oncle terrible
Команда форума
из постоянного стремления улучшить свой движок сайта
Давай ты покажешь мне свой движок, и я, по случаю выходного, покажу тебе три чудовищных косяка - в плане безопасности, производительности, или оптимальности кода?
То есть вещи, уровня действительно "улучшить движок", а не "когда коту делать нечего, он гигиену наводит"
Несравнимые с той херомундией, которой ты обстрадал тут всё утро.
 

fixxxer

К.О.
Партнер клуба
Univers
прямо отвечая на твой вопрос - нет, в mysql нельзя. В oracle и postgresql, если тебе интересно, можно.
 
Сверху