Сгенерировать значение не в таблице mysql

Я использовал следующий запрос, который используется для генерации случайного значения не в таблице mysql.

SELECT FLOOR( RAND()*1000 + 50 ) AS temp FROM tempcode WHERE  'temp' NOT IN ( SELECT code FROM tempcode ) LIMIT 1

но когда я уменьшаю значение до RAND() * 4 для проверки цели, используя фиктивные данные, которые не работают должным образом.

SELECT FLOOR( RAND()*1000 + 50 ) AS temp FROM tempcode WHERE  'temp' NOT IN ( SELECT code FROM tempcode ) LIMIT 1

В чем причина? Любые предложения по созданию значения не в таблице mysql?


person manitaz    schedule 24.03.2015    source источник
comment
Потому что вы генерируете только числа от 0 до 3 — не так много случайностей и много столкновений. Возможно, UUID() сделает то, что вам нужно.   -  person    schedule 24.03.2015
comment
@HoboSapiens Как использовать UUID() в mysql? Если все данные генерируются случайным образом, если они уже есть в таблице, они должны возвращать значение null ??   -  person manitaz    schedule 24.03.2015
comment
@phpPhil Что вы имеете в виду под «Попробуйте обернуть temp обратными галочками». Можете ли вы прислать мне пример кода?   -  person manitaz    schedule 24.03.2015
comment
SELECT UUID() подойдет. По определению UUID должен быть уникальным.   -  person    schedule 24.03.2015
comment
Неважно - я удалил комментарий, потому что он был неправильным и не решает вашу проблему. Это было основано на том, что 'temp' не выглядел как правильный синтаксис, но согласно этому, так оно и есть. Извините за путаницу.   -  person phpPhil    schedule 24.03.2015
comment
Мне нужно сгенерировать целочисленное значение. Это возвращает 09728031-d1e1-11e4-bf6e-101f74b278c3 Любая помощь?   -  person manitaz    schedule 24.03.2015
comment
@phpPhil Я думаю, что приведенный выше код не работает. проверили его с заполненными данными.   -  person manitaz    schedule 24.03.2015


Ответы (1)


Это не элегантно, но работает по запросу, пока не будут использованы все 1000 кодов:

select x from  
    (select concat(hundreds, tens, ones) x from 
    (select 1 as ones union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 0) ones, 
    (select 1 as tens union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 0) tens, 
    (select 1 as hundreds union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 0) hundreds) thousand
    where thousand.x not in 
        (select code from tempcode) 
    order by rand() limit 1;
person Steve Mandl    schedule 29.04.2015