Xpoint
   [напомнить пароль]

Случайный столбец

Метки: [без меток]
2005-05-14 18:54:39 [обр] Дмитрий Терёхин(0/1)[досье]

В продолжение предыдущей темы

есть таблица футболистов, в которой столбцы: названия умений (shoot, pass..), и abiltity - какое умение игрок тренирует. например
players
name shoot pass .. ability
Булыкин 10 20 .. shoot
Бекхем 5 10 .. pass

но ещё игрок может тренировать случайное умение
Батистута 15 10 .. random

как провести тренировку игрока со случайными умениями одним запросом? не хотелось бы если таких игроков скажем 50.000, делать select -> сгенерить рендом -> update по 50.000 раз

спустя 10 минут [обр] Алексей Севрюков(7/1292)[досье]
Дмитрий Терёхин[досье] Хм, ничего не понял, может Вы имеете ввиду RAND()? Поставьте вопрос конкретнее.
спустя 6 минут [обр] GRAy(8/259)[досье]

смотри мой ответ в предыдущей теме.

update players
 set shot = decode(f(ability,id),'shot', shot*1.01, shot),
   pass = decode(f(ability,id),'pass', pass*1.01, pass)
where ability = 'random';

Где f некая функция генерящая для одного id одинаковое произвольное значение из набора, т.е. так чтобы гарантировано на одну строчку один раз была выбрана случайная колонка.

спустя 22 минуты [обр] Дмитрий Терёхин(0/1)[досье]
а что делает функция decode и какими БД поддерживается?
мне желательно найти решение для mysql
спустя 1 час 9 минут [обр] Александр aka Efreeti(0/111)[досье]

GRAy[досье]Вообще да, для MySQL функция decode декодирует строку, закодированную функцией encode. И там всего лишь 2 параметра. Вы наверное е про MySQL говорили.

Дмитрий Терёхин[досье]А что Вы не в форуме MySQL эти треды создали?

спустя 3 минуты [обр] Дмитрий Терёхин(0/1)[досье]
ну хотелось бы не только для mysql узнать варианты, а вообще в sql..
на практике меня интересует MySQL и SQLLite.
спустя 3 часа 36 минут [обр] Алексей В. Иванов(2/2861)[досье]
Дмитрий Терёхин[досье] поставьте вопрос четко. Ничего не понятно.
спустя 2 минуты [обр] Алексей В. Иванов(2/2861)[досье]
Блин, кросспостинг: Запрос с определением столбцов
спустя 14 часов [обр] GRAy(8/259)[досье]

функция decode в Oracle делает проверку на равенство первого аргумента второму и если они равны возвращает третий аргумент - в противном случае возвращает четвёртый. Есть ли аналог такой функци в MySQL я к сожалению не знаю. Стандартом SQL99 предусмотрен другой вариант:

update players
 set shot = (case f(ability,id) = 'shot' then shot*1.01 else shot end case),
   pass = (case f(ability,id) = 'shot' then pass*1.01 else pass end case)
where ability = 'random';

но опять же не знаю поддерживает ли их MySQL

спустя 6 часов [обр] Александр aka Efreeti(0/111)[досье]
В MySQL есть CASE, правда пишеться немного по-другому.
Powered by POEM™ Engine Copyright © 2002-2005