powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пара вопросов
6 сообщений из 6, страница 1 из 1
Пара вопросов
    #33065449
есть таблица футболистов, в которой столбцы: названия умений (shoot, pass..), и abiltity - какое умение игрок тренирует. например
players
name shoot pass .. ability
Булыкин 10 20 .. shoot
Бекхем 5 10 .. pass


вопрос 1
как написать один запрос, который повышает всем игрокам тренируемые умения на 1%?
Если никак нельзя, то остается вариант сделать число запросов равное числу умений и указать конкретные умения.

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

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

если опять же никак нельзя, то какой придумать вариант наиболее оптимальный?
...
Рейтинг: 0 / 0
Пара вопросов
    #33065573
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ответ на первый вопрос такой

(SQL стандартный MySQL нет под рукой проверить не могу но должно по идее работать)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DDL таблицы
CREATE TABLE test.foot
(
  id serial NOT NULL,
  name varchar( 255 ),
  selected_s varchar,
  s_1 float4,
  s_2 float4,
  CONSTRAINT foot_id_pkey PRIMARY KEY (id)
) 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
запрос
UPDATE 
  foot
SET
  s_1 = (
    CASE
      WHEN selected_s = 's_1' THEN s_1 + s_1 *  0 . 01  
      ELSE s_1
    END
  ),
  s_2 = (
    CASE
      WHEN selected_s = 's_2' THEN s_2 + s_2 *  0 . 01  
      ELSE s_2
    END
  )

про случайные еще подумаю
...
Рейтинг: 0 / 0
Пара вопросов
    #33065954
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
UPDATE 
  foot
SET
  @r := RAND(),
  s_1 = (
    CASE
      WHEN selected_s = 's_1' OR (selected_s = 'random' AND @r< 0 . 5 )
      THEN s_1 + s_1 *  0 . 01  
      ELSE s_1
    END
  ),
  s_2 = (
    CASE
      WHEN selected_s = 's_2' OR (selected_s = 'random' AND @r> 0 . 5 )
      THEN s_2 + s_2 *  0 . 01  
      ELSE s_2
    END
  )
возможно, гон.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно ц
...
Рейтинг: 0 / 0
Пара вопросов
    #33066010
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не так должно работать просто я незнал что в MySQL можно объявить переменную только если полей больше то и рандом немного п одругому выглядеть будет и переменную можно ли так объявить тоже не уверен.
...
Рейтинг: 0 / 0
Пара вопросов
    #33066034
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объявить можно один раз за сессию. Вроде, можно даже не объявлять. Не уверен, что можно использовать присвоение в апдейте .
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно ц
...
Рейтинг: 0 / 0
Пара вопросов
    #33066039
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо case можно для краткости юзать if
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно ц
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пара вопросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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