За последние 24 часа нас посетили 16894 программиста и 1291 робот. Сейчас ищут 1479 программистов ...

Как обновить таблицы сразу с несколькими условиями?

Тема в разделе "PHP и базы данных", создана пользователем Woods, 5 дек 2015.

  1. Woods

    Woods Активный пользователь

    С нами с:
    5 дек 2015
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте. Заранее прошу прощения, если мои вопросы и методы покажутся "глупыми", но я недавно начал изучать php и пока просто изучаю возможности.
    Столкнулся с такой проблемкой:
    Дано:
    Таблица с событием (id, com1, com2) - айди, команда1, команда2.
    Таблица с игроками (id, login, money) - айди, логин, количество денег.
    Таблица со ставками (id_event, user, command, stavka, koeff, status) - айди_события, игрок, команда, ставка, коэффициент, статус.

    Например:
    Событие:
    (id, com1, com2)
    (1, команда1, команда2)
    Пользователи:
    (id, login, money)
    (1, Valera, 100),
    (2, Cyber, 15),
    (3, Woodi, 56)
    Ставки:
    (id_event, user, command, stavka, koeff, status)
    (1, Valera, команда1, 20, 1.3, 1)
    (1, Cyber, команда1, 30, 1.3, 1)
    (1, Woodi, команда2, 15, 2.8, 1)

    Нужно:
    Чтобы при победе "команды1" игроки "Valera" и "Cyber" получили деньги (формула: деньги + ставка * коэф.) в таблицу с "игроками" и статус в таблице со "ставками" изменился на "2".
    А у проигравшего статус изменился на "3".
    (При завершении события я отправляю форму с итогами и хочу, чтобы с итогами отправлялись результаты ставок)

    Пробовал:
    Код (PHP):
    1. <?
    2. /* Тут выборка денег игрока и id события, где деньги = $usermoney, а id события = $id_event */ 
    3. $stmt = $mysqli->prepare('SELECT `user`, `command`, `stavka`, `koeff`, `status` FROM `stavki` WHERE `id_event`=? AND `com1`=? AND `status`=1');
    4. $stmt->bind_param('is', $id_event, $win_com1);
    5. $stmt->execute();
    6. $stmt->bind_result($s_user, $s_com, $s_stav, $s_koeff, $s_stat);
    7. $stmt->store_result();
    8. $stmt->fetch();
    9. $stmt->close();
    10.                             
    11. $stav_win = $s_stav * $s_koeff;
    12. $money_new = $usermoney + $stav_win;
    13.                             
    14. $stmt = $mysqli->prepare('UPDATE `users` SET `money`=? WHERE `login`=?');
    15. $stmt->bind_param('ss', $money_new, $s_user);
    16. $stmt->execute();
    17. $stmt->close();
    18.                             
    19. $stmt = $mysqli->prepare('UPDATE `stavki` SET `status`=2 WHERE `user`=?');
    20. $stmt->bind_param('s', $s_user);
    21. $stmt->execute();
    22. $stmt->close();
    23. ?>
    Проблема:
    При таком раскладе изменяется только первый игрок сделавший ставку, но каким образом сделать чтобы изменения косались всех игроков со статусом 1?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.112
    Симпатии:
    1.243
    Адрес:
    там-сям
    Вопрос как-то связан с заголовком этой темы? Если тебе надо проапдейтить несколько строк, то требуется одно из двух:
    - либо в UPDATE … WHERE условие указать такое условие, которое соответствует сразу нескольким строкам,
    - либо для каждого значения айди вызывать отдельный UPDATE … WHERE айди=чтототам. просто перечислить несколько таких команд или в цикле вызывать.

    Не вижу чтобы ты пытался это сделать.