Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL] Рассчитать выигрыши и перечислить игроку 
:(
    Опции темы
STIM
Дата 4.4.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Здравствуйте! Есть следующая задача: есть таблица с доступными ставками и результатом, есть таблица с совершенными ставками, есть таблица с данными игроков.

Сначала устанавливаем в первую таблицу значение получившегося результата у какой-то определенной ставки, затем при нажатии кнопки "Рассчитать" должен выполниться запрос, в котором необходимо найти в таблице совершенных ставок тех кто поставил на данную ставку(player_number), посмотреть совпадает ли результат (bet_type) на который они поставили ставку с получившимся результатом, для тех игроков у кого совпадает необходимо взять из все той же таблицы совершенных ставок размер ставки (stake) , затем умножить на коэффициент (coeff) указанный в этой же строке, и прибавить к полю balance таблицы "Players".

Я думаю такой запрос нужен: UPDATE players SET balance = balance + (select coeff * stake from perfect_bet where bet_type=? and id = ?) WHERE player_number = (SELECT player_number from perfect_bet where bet_type=? and id = ?), где стоят вопросы там данные задаются приложением (делаю запрос из под приложения написанного на java).

Как правильно составить запрос?

Коды таблиц:

Код

CREATE TABLE `players` (
    `player_number` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `e_mail` VARCHAR(255) NOT NULL,
    `balance` DOUBLE UNSIGNED NOT NULL,
    PRIMARY KEY (`player_number`)
)
COLLATE='cp1251_general_ci'
ENGINE=InnoDB


Код

CREATE TABLE `perfect_bet` (
    `perfect_bet_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `id` INT(10) UNSIGNED NOT NULL,
    `bet_type` VARCHAR(4) NOT NULL,
    `coeff` DOUBLE(3,1) UNSIGNED NOT NULL,
    `stake` DOUBLE UNSIGNED NOT NULL,
    `perfect_bet_time` DATETIME NOT NULL,
    `player_number` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`perfect_bet_id`),
    INDEX `FK_perfect_bet_betting_list` (`id`),
    INDEX `FK_perfect_bet_players` (`player_number`),
    CONSTRAINT `FK_perfect_bet_betting_list` FOREIGN KEY (`id`) REFERENCES `betting_list` (`bet_id`),
    CONSTRAINT `FK_perfect_bet_players` FOREIGN KEY (`player_number`) REFERENCES `players` (`player_number`)
)
COLLATE='cp1251_general_ci'
ENGINE=InnoDB


Код

CREATE TABLE `betting_list` (
    `bet_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `bet_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `champ_id` INT(255) NOT NULL,
    `name_com1` VARCHAR(255) NOT NULL,
    `name_com2` VARCHAR(255) NOT NULL,
    `win_1` DOUBLE UNSIGNED NOT NULL,
    `draw` DOUBLE UNSIGNED NOT NULL,
    `win_2` DOUBLE UNSIGNED NOT NULL,
    `result` VARCHAR(4) NOT NULL,
    PRIMARY KEY (`bet_id`),
    INDEX `champ_id` (`champ_id`),
    CONSTRAINT `champ_id` FOREIGN KEY (`champ_id`) REFERENCES `comps` (`comp_id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='cp1251_general_ci'
ENGINE=InnoDB


Это сообщение отредактировал(а) STIM - 4.4.2012, 18:56
PM MAIL   Вверх
Zloxa
Дата 5.4.2012, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(STIM @  4.4.2012,  19:52 Найти цитируемый пост)
такой запрос нужен


Цитата(STIM @  4.4.2012,  19:52 Найти цитируемый пост)
Как правильно составить запрос?

 smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
STIM
Дата 5.4.2012, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Цитата(Zloxa @ 5.4.2012,  08:49)
Цитата(STIM @  4.4.2012,  19:52 Найти цитируемый пост)
такой запрос нужен


Цитата(STIM @  4.4.2012,  19:52 Найти цитируемый пост)
Как правильно составить запрос?

 smile

Понятно же, что я хотел что бы вы проверили мой запрос на наличие ошибок. И они есть.
Мой запрос работает только если в таблице perfect_bet есть одна ставка с выигрышными данными, если же их несколько то запрос не работает. Т.е. по сути подзапросы возвращают несколько наборов. 

Код

"UPDATE players SET balance = balance + (select coeff * stake from perfect_bet where bet_type=? and id = ?) " +

"WHERE player_number IN (SELECT player_number from perfect_bet where bet_type=? and id = ?)"
 
Так тоже не работает, как исправить?
PM MAIL   Вверх
Zloxa
Дата 5.4.2012, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(STIM @  5.4.2012,  17:11 Найти цитируемый пост)
если же их несколько то запрос не работает

И как же должно работать, если их несколько?

Добавлено через 5 минут и 37 секунд
На самом деле вы изложили свою задачу весьма путанно. Конечно, быть может я туп, но для меня, даже после третьего прочтения суть идеи не прояснилась.

Структура данных это хорошо. Очень хорошо. Но, быть может, вы покажите и фрагмнет самих данных + ожидаемый результат на предоставленном фрагменте + объяснение почему он именно таков?

Добавлено через 8 минут и 40 секунд
Цитата(STIM @  5.4.2012,  17:11 Найти цитируемый пост)
Понятно же, что я хотел что бы вы проверили мой запрос на наличие ошибок.

Нет, не понятно.

Мне всегда было интересно - зачем публикуют не работающие запросы, не указывая что именно в результате не устраивает. smile Проверку же синтаксиса всегда может выполнить и синтаксический анализатор.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
STIM
Дата 5.4.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.2.2012

Репутация: нет
Всего: нет



Разделил на три отдельных запроса и заработало. Спасибо за внимание.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.