Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 27/09/10 в 13:25 |
Сгенерить случайное целое число в диапазоне от N до M, - что за нереальная задача для мускуля?
mysql> select RAND();
+-------------------+
| RAND() |
+-------------------+
| 0.813593878237152 |
+-------------------+
1 row in set (0.00 sec)
mysql> select RAND(1, 7);
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'RAND'
mysql> select ROUND(RAND()*10, 0);
+---------------------+
| ROUND(RAND()*10, 0) |
+---------------------+
| 3 |
+---------------------+
1 row in set (0.00 sec)
mysql> select ROUND(RAND()*10, 0);
+---------------------+
| ROUND(RAND()*10, 0) |
+---------------------+
| 5 |
+---------------------+
1 row in set (0.00 sec)
mysql> select ROUND(RAND()*10, 0);
+---------------------+
| ROUND(RAND()*10, 0) |
+---------------------+
| 4 |
+---------------------+
1 row in set (0.00 sec)
от 0 до 10 генерит. как сделать от 3 до 6 к примеру? пхп мучать?
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 27/09/10 в 13:41 |
в гугле тебя забанили?
Цитата: | To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)). |
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 27/09/10 в 14:03 |
mysql> select FLOOR(3 + RAND() * (6 – 3));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '– 3))' at line 1
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 27/09/10 в 14:07 |
понедельник день тяжелый.
у тебя минус неправильный
спецсимвол кривой из какой-то другой кодировки.
просто сотри минус и заново напиши
mysql> select FLOOR(3 + RAND() * (6 - 3));
+-----------------------------+
| FLOOR(3 + RAND() * (6 - 3)) |
+-----------------------------+
| 5 |
+-----------------------------+
1 row in set (0.02 sec)
mysql> select FLOOR(3 + RAND() * (6 - 3));
+-----------------------------+
| FLOOR(3 + RAND() * (6 - 3)) |
+-----------------------------+
| 3 |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select FLOOR(3 + RAND() * (6 - 3));
+-----------------------------+
| FLOOR(3 + RAND() * (6 - 3)) |
+-----------------------------+
| 4 |
+-----------------------------+
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 27/09/10 в 14:25 |
как ты увидел что минус не тот? Вот стопицот тысяч раз из веба копипастил - первый раз проблема такая. кстати не только минус а еще что-то, - пришлось руками всю команду переписать чтобы заработала. но заработала . спасибо.
И второй вопрос как часть первого.
К текущей дате добавляем рандомное кол-во дней\часов\минут. что не хватает? http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
mysql> SELECT DATE_ADD(CURDATE(), INTERVAL "FLOOR(1+RAND()*(4-1)) FLOOR(1+RAND()*(4-1)):FLOOR(1+RAND()*(4-1))" DAY_MINUTE) as colum;
+-------+
| colum |
+-------+
| NULL |
+-------+
1 row in set (0.00 sec)
в то время как простая запись:
mysql> SELECT DATE_ADD(CURDATE(), INTERVAL "2 2:2" DAY_MINUTE) colum;
+---------------------+
| colum |
+---------------------+
| 2010-09-29 02:02:00 |
+---------------------+
1 row in set (0.00 sec)
вроде на преобразование типов не грешу. add_date ждет строку. floor отдает число но сам в "кавычках"
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 27/09/10 в 14:55 |
mysql> SELECT DATE_ADD(CURDATE(), INTERVAL CONCAT(FLOOR(1+RAND()*(4-1)),"\" ",FLOOR(1+RAND()*(4-1)),":",FLOOR(1+RAND()*(4-1)),"\"") DAY_MINUTE) as colum;
+---------------------+
| colum |
+---------------------+
| 2010-09-29 01:01:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD(CURDATE(), INTERVAL CONCAT(FLOOR(1+RAND()*(4-1)),"\" ",FLOOR(1+RAND()*(4-1)),":",FLOOR(1+RAND()*(4-1)),"\"") DAY_MINUTE) as colum;
+---------------------+
| colum |
+---------------------+
| 2010-09-29 03:01:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD(CURDATE(), INTERVAL CONCAT(FLOOR(1+RAND()*(4-1)),"\" ",FLOOR(1+RAND()*(4-1)),":",FLOOR(1+RAND()*(4-1)),"\"") DAY_MINUTE) as colum;
+---------------------+
| colum |
+---------------------+
| 2010-09-29 01:01:00 |
+---------------------+
1 row in set (0.00 sec)
в кавычках вся проблема. внутри кавычек - строка. функция вычисления случайного числа там не выполняется.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 27/09/10 в 15:29 |
спасибо. монстр
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090
|
Добавлено: 27/09/10 в 18:10 |
Извените, но накуя вот это
???
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 27/09/10 в 18:15 |
для наглядности. что б показать, что от 1 до 4х искомое число.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 27/09/10 в 18:27 |
от 1 включительно до 4 невключительно.
а вообще, да. чет мозгом не могу понять как это работает
FLOOR(1+RAND()*(4-1)):
- RAND() - генерит рандомное число от 0 до 1.0
- умножаем на 3 (зачем?)
- прибавляем 1 (зачем?)
- FLOOR(N) — дергает наибольшее целое число относительно N.xxx отбрасывая числа после запятой.
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011
|
Добавлено: 27/09/10 в 21:19 |
Ну смотри, пусть тебе надо сгенерить число от 3 до 6. Это можно представить как генерацию числа от 0 до 3, к которому прибавляем единицу. Генерировать средствами мускуля мы можем только от 0 до 1, значит, домножаем сгенерированное на 3 (получится от 0 до 3) и прибавляем 3 (получится от 3 до 6), ну и округлем, ясен перец.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 29/09/10 в 16:15 |
понял
|
|
пришел к победе коммунистического труда
|
0
|
|
|