|
|
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
текст запроса: SELECT cast( rand()*10000 as int) AS Driver_ID where ( cast( rand()*10000 as int) Not In ( SELECT DRIVER_ID FROM DRIVERS) аnd (cast( rand()*10000 as int)) > 1000 AND cast( rand()*10000 as int) < 9000) мне нужно получить рандомальное число >1000 and <9000 не содержащаяся в поле Driver_ID таблички DRIVERS запрос вроде написан правильно, но есть один нюанс иногда ничего не возвращает как быть? считывать результат в переменную и проверять в цикле вернул/не вернул запрос что-то или можно написать 1 запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:21 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
а DRIVER_ID null не бывает? это я пытаюсь предположить почему иногда не возвращает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:35 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Не возвращает потому, что такой ID уже есть в таблице. Причем чем больше будет записей в таблице, тем чаще этот запрос ничего не будет возвращать. А Recordset не спасет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:37 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Или потому, что cast( rand()*10000 as int) не входит в треб. множество ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:39 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
DRIVER_ID null не бывает я так подозреваю что запрос ничего не возвращает в том случае если то что rand()*10000 вернула не подходит в where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:44 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Причем ИМХО в первом Where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:50 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
так что скажет стая, в смысле уважаемые коллеги? запрос написан правильно? рекордсет не подходит крутить цикл пока результат не вернёт не null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 15:51 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Теоретический вопрос. Функция rand() используется в запросе 4 раза. Связана, имхо, с системными часами. Если запрос выполняется достаточно быстро, то каждый rand() вернет одно и тоже значение... Так ли это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:05 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Можно попробовать так Код: plaintext 1. 2. 3. 4. Это скорее всего не решение, но по крайней мере новое направление мысли.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:14 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
а что предлагаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:14 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Если абстрагироваться от запросов и рекордсетов и рассмотреть эту задачу так сказать вооруженным взглядом (ща пойду в буфет за булочками и кофе сгоняю..... :-()... ), то у нас есть задача получения через rand не совпадающих чисел в опред. диапазоне. Совершенно естетственно, что при последовательном вызове rand у нас значения новых будут иногда совпадать с уже полученными и чем дальше тем чаще - это все понятно. Так что при таком подходе нет других вариантов: либо сам запрос будет несколько раз вызываться или в нем функция будут сидеть и сама крутить цикл если совпадает, но в конечном итоге, кто-то обязательно будет крутить. Тут такой вопрос, а какие вообще правила игры, что получить надо??? Если тебе надо например получить 100 случ. чисел в диапазоне от 200 до 300, то это проще делается по принципу "мешания" колоды карт А вот если только 80 случ. чисел в диапазоне от 200 до 300, тогда конечно все посложнее будет... хотя есть некоторые мысли.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:18 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Может генернуть разок табличку со значениями от 1000 до 9000, а потом просто выбирать из нее значения, которых нет в DRIVERS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:20 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Вот этак лучше Код: plaintext 1. 2. 3. 4. Единственная проблема - если в таблице не будет ни одной записи, то и числа не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:21 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Поигравшись немного с параметрами, пришёл к выводу, что вариант Витал самый разумный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:27 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Думаю сложновато это будет только через запрос сделать. думаю надо какую-нибудь свою функцию накатать, которая будет эту таблицу DRIVER_ID перелапачивать и уже возращать число... блин, ща, тут еще одна мысль появилась, пойду подумаю пока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:35 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
мне нужно получить рандомальное число >1000 and <9000 не содержащееся в поле Driver_ID таблички DRIVERS генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к табличка DRIVERS динамическая полученное значение я потом пишу в эту самую табличку DRIVERS простой запрос я и так состряпала, чуствовала что можно без цикла обойтись но как не знала пожалуй вариант Павла самый подходящий 2Единственная проблема - если в таблице не будет ни одной записи, то и числа не будет таблица не пустая всем большое спасибо если есть ещё какие-то варианты предлагайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:38 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
> генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к табличка DRIVERS динамическая Ну и что? Пишется запрос, который возвращает из таблицы А те значения, которых нет в таблице Б... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:40 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
Можно сгенерить темповую табличку от 1 до 8000-N записей. Первое поле -заполнить счетчиком. Второе - ("не ID-ями") (в произвольном порядке). рендомом брать счетчик. (на 1х8000-N). Возвращать "не-ID". //Или, что то же самое - заполняем 1000-9000, выкалываем ID, пронумеровываем (второе поле) - например вставкой полученных значений в (темповую) таблицу со счетчиком...// ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:47 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
генернуть разок табличку со значениями от 1000 до 9000 не подходит, т.к табличка DRIVERS динамическая полученное значение я потом пишу в эту самую табличку DRIVERS это я погорячилась это подходит но в варианте Павла не надо генерировать таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 16:57 |
|
||
|
вопрос по SQL или помогите девушке
|
|||
|---|---|---|---|
|
#18+
В.С Пишется запрос, который возвращает из таблицы А те значения, которых нет в таблице Б... если так сделать то выдёргиваются значения не рандомально а по порядку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2003, 20:47 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32286597&tid=1678989]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 450ms |

| 0 / 0 |
