Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно что-то лучшее / 13 сообщений из 13, страница 1 из 1
02.10.2013, 10:43:23
    #38413942
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
есть такой код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
    GROUP_CONCAT(z.d) INTO @i
  FROM z;

  SET @s = 1000;
  SET @d = 0;

  WHILE @s > 0 OR @d = 0 DO
    SET @d = TRUNCATE((RAND() * 100), 0);
    SET @s = FIND_IN_SET(@d, @i);
  END WHILE;


  SELECT     @d;



проверка о запонении всего диапазона от 1 до 99 не требуется.

что-нибудь по-лучше?
зы
автоинкремент - это не здесь.
...
Рейтинг: 0 / 0
02.10.2013, 10:52:49
    #38413958
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
вадя,

а что эта НЁХ делает ?

неужели ищет "пропуски" в таб.z ??
...
Рейтинг: 0 / 0
02.10.2013, 10:57:48
    #38413962
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
да, ищет пропуски.
это просто кусок, очищенный для наглядности
...
Рейтинг: 0 / 0
02.10.2013, 11:00:33
    #38413966
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
точнее не пропуски (хотя и так можно поставить задачу)
добавляет новое случайное отсутствующее значение
поле с автинкрементом есть.
...
Рейтинг: 0 / 0
02.10.2013, 11:03:57
    #38413980
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
Дайте мне это развидеть!
А если пропусков нет? пипец, сервер повесился? убить за такой код...
...
Рейтинг: 0 / 0
02.10.2013, 11:05:05
    #38413985
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
Как вариант:
Код: sql
1.
2.
3.
4.
set @i='10,2,100,15,8';
set @n=length(@i)-length(replace(@i,',',''))+1;
set @r=(truncate(rand()*@n,0)mod @n)+1;
select @i, @n, @r, substring_index(substring_index(concat(@i,','), ',', @r),',',-1);


идея для выборки случайной строки красивая, но ведь все равно скан таблицы для построения списка...
...
Рейтинг: 0 / 0
02.10.2013, 11:09:18
    #38413996
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
что-то типа такого
Код: sql
1.
2.
3.
4.
5.
select z1.d+1
from z z1 
where not exists (select 1 from z z2 where z2.d=z1.d+1)
/* order by RAND() */ 
limit 1
...
Рейтинг: 0 / 0
02.10.2013, 11:10:39
    #38413999
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
Ээээ... Неверно понял постановку задачи, звиняюсь :)
...
Рейтинг: 0 / 0
02.10.2013, 11:13:22
    #38414000
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
Имхо самое разумное - завести таблицу с числами от 1 до 99, и далее просто

Код: sql
1.
2.
3.
4.
5.
6.
select n.val
from numbers n
left join z on n.val=z.d
where z.d is null
order by rand()
limit 1
...
Рейтинг: 0 / 0
02.10.2013, 12:02:50
    #38414070
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
AkinaДайте мне это развидеть!
А если пропусков нет? пипец, сервер повесился? убить за такой код...

я же написал
проверка о запонении всего диапазона от 1 до 99(999) не требуется.

этого не будет просто потому что физически не будет такого количества(в реале ограничено 1000)
таблицу из 1000 строк для таких целей - это нормально?
это не иронически вопрос.
насколько это оптимальнее моего варианта?

2qwerty112
у меня однократное обращение к таблице, а у тебя?
...
Рейтинг: 0 / 0
02.10.2013, 12:07:10
    #38414080
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
вадя2qwerty112
у меня однократное обращение к таблице, а у тебя?
вадя,

"на фоне" твоего цикла с RAND, по которому "индийские писатели" просто рыдают от зависти,
вспоминать про какие-то там "однократные обращения" - просто смешно ...
...
Рейтинг: 0 / 0
02.10.2013, 12:19:14
    #38414103
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
qwerty112вадя2qwerty112
у меня однократное обращение к таблице, а у тебя?
вадя,

"на фоне" твоего цикла с RAND, по которому "индийские писатели" просто рыдают от зависти,
вспоминать про какие-то там "однократные обращения" - просто смешно ...

но у тебя простая замена автоинкремента.
а мне надо именно случайное значение.

по поводу индийцев - дак я и спрашиваю "российский" вариант
...
Рейтинг: 0 / 0
02.10.2013, 12:33:22
    #38414131
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно что-то лучшее
вадяно у тебя простая замена автоинкремента.
а мне надо именно случайное значение.

нуу, оно тоже "почти случайное"...

ок,
тогда с опороной таблицей, как Akina предложил - оптимальный вариант

разве что, с учётом того что всего проверяется 1000 значений,
вместо таблицы, можно генерить числа сразу в запросе - для 1000 будет терпимо

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.val
--from numbers n
from
(select concat(a.dig,b.dig,c.dig)+0 as val
from 
  (select 0 as dig union all select 1 ....) a,
  (select 0 as dig union all select 1 ....) b,
  (select 0 as dig union all select 1 ....) c) n
left join z on n.val=z.d
where z.d is null
order by rand()
limit 1
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужно что-то лучшее / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]