Реклама на сайте Advertise with us

MySQL, RAND(N,M)?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Добрых Дел Мастер

С нами с 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)).

нету у меня подписи...

4
 

Добрых Дел Мастер

С нами с 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 |
+-----------------------------+

нету у меня подписи...

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 27/09/10 в 14:25       Ответить с цитатойцитата 

как ты увидел что минус не тот? Вот стопицот тысяч раз из веба копипастил - первый раз проблема такая. кстати не только минус а еще что-то, - пришлось руками всю команду переписать чтобы заработала. но заработала smail54.gif. спасибо.
И второй вопрос как часть первого.
К текущей дате добавляем рандомное кол-во дней\часов\минут. что не хватает? 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)

в кавычках вся проблема. внутри кавычек - строка. функция вычисления случайного числа там не выполняется.

нету у меня подписи...

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 27/09/10 в 15:29       Ответить с цитатойцитата 

спасибо. монстр smail54.gif

пришел к победе коммунистического труда

0
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 27/09/10 в 18:10       Ответить с цитатойцитата 

Извените, но накуя вот это
Цитата:
RAND()*(4-1)

???

True хостинг

4
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 27/09/10 в 18:15       Ответить с цитатойцитата 

для наглядности. что б показать, что от 1 до 4х искомое число.

нету у меня подписи...

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), ну и округлем, ясен перец.

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/09/10 в 16:15       Ответить с цитатойцитата 

понял

пришел к победе коммунистического труда

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »