2012-03-14 5 views
2

Im пытаясь подсчитать количество строк в таблице и генерации случайных чисел для поля «случайных» Сейчас это работает:Вставка случайных чисел в таблицу в MYSQL

SELECT COUNT(*) FROM my_table; 

и это работает:

UPDATE my_table SET random = FLOOR(6500 * RAND()) + 1; 

Но это не работает:

UPDATE my_table SET random = FLOOR((SELECT COUNT(*)) * RAND()) + 1; 

Но это подсчитывает строки как 0 и добавляет один так ll поля имеют номер один вместо уникального случайного числа.

Любые идеи, что я делаю неправильно, были бы наиболее полезными.

ответ

8

Как насчет этого?

SELECT @cnt := count(*) FROM my_table; 
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1; 

Демо: http://sqlfiddle.com/#!2/a896d/4

+0

Это именно то, что было необходимо, я не понимал, что вы можете использовать переменные, как в PHP. Спасибо! –

0

Вы спрашиваете, что вы делаете неправильно. В руководстве MySQL говорится: «В настоящее время вы не можете обновить таблицу и выбрать из той же таблицы в подзапросе». Это означает, что вы не можете сделать что-то вроде

, где вы делаете полный выбор как часть обновления.

Однако вы можете использовать выбор без ошибок, как вы нашли, но результаты не то, что вы ожидаете, - область действия оператора SELECT, поскольку вы использовали его, - это просто работающая строка в то время. Вы можете проверить это, создав поле под названием num и сделать это:

update my_table set random = (select count(*)); 

Вы увидите, что случайный установлен в 1 для каждой строки, так как выбор смотрит только на одну строку обновляемого при этом момент.

Решение состоит в том, чтобы вычислить количество строк, сохранить его в переменной и ссылаться на эту переменную в другом выражении.

SET @row_count = count(*) from my_table; 
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1; 
Смежные вопросы