За последние 24 часа нас посетили 22836 программистов и 1272 робота. Сейчас ищут 770 программистов ...

присвоить значение переменной

Тема в разделе "PHP и базы данных", создана пользователем Владимир11, 26 мар 2019.

  1. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    @Artur_hopf
    почти
    пример таков

    смотри поставил я 1 руб у меня 1-11 билетов поставил второй рубль у него 12-22 билетов, если первый добавит еще рубль то очередь смещается у первого становится 1-21 билетов у второго 22-32 билет

    1-11 билеты 1 это старт 11 энд и тд
     
  2. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    То есть в этом примере у каждого 11 билетов? Билеты - это виртуальная штука, определяющая шанс выигрыша?
     
  3. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    да ток у каждого юзера своя очередь
     
  4. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    Так, я опять запутался. Ещё раз с самого начала подробнее, как эти очереди формируются
     
    #29 Alex654, 3 апр 2019
    Последнее редактирование: 3 апр 2019
  5. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    в зависимости от суммы и ида

    ид юзер сума старт енд
    1 вася 1 1 1
    2 петя 3 2 4

    если появится дима с идом 3 то
    ид юзер сума старт енд
    1 вася 1 1 1
    2 петя 3 2 4
    3 дима 1 5 6
    и тд.....

    если вася внес еще 1 то есть его сумма теперь 2

    1 вася 2 1 2

    2 петя 3 3 5
    3 дима 1 6 7

    и тд
     
  6. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    Да бляха ж муха, извините мой французский. У вас ещё и с математикой проблемы. Если верхняя граница идёт по последнему элементу, включая его, то должно быть 1 6 6!
     
  7. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    извиняюсь да 1 6 6 так как 1 билет
     
  8. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    Прошу прощения за излишнюю эмоциональность, просто если бы вы сразу описали задачу понятно, то можно было бы её решить за первые 10 минут, а не тратить 3 дня на выяснение деталей :) Реально алгоритм действительно очень простой.

    При такой структуре БД достаточно сделать всего лишь два запроса:

    PHP:
    1. $str = "UPDATE `table` SET `sum` SET `sum`+".$amount.
    2. " WHERE `id`=".$user_id."; ";
    3. $str .= "UPDATE `table` SET `start` SET `start`+".$amount.
    4. " WHERE `start`>(SELECT `start` FROM `table` WHERE `id`=".$user_id.")";
    5. mysql_query($str, $db);
    6.  
    7. // Опционально можно проверить, есть ли нарушения логики
    8. $res = mysql_query("SELECT FROM `table`".
    9. " WHERE `start`>=(SELECT `start` FROM `table` WHERE `id`=".$user_id.")".
    10. " AND `start`<(SELECT `start` FROM `table` WHERE `id`=".$user_id.")+(SELECT `sum` FROM `table` WHERE `id`=".$user_id.")", $db);
    11. while ($row = mysql_fetch_assoc($res)) {
    12.    echo "Неверные данные: ".$row['name'].": ".$row['start'].", ".$row['sum']."<br />\r\n";
    13. }

    На мой взгляд это решение изящнее, чем полный пересчёт хвоста таблицы на основе значений `start` по цепочке - как минимум тем, что здесь мы не используем PHP, а только MySQL. Это код добавления билетов уже существующему игроку. Код добавления нового игрока я думаю вы напишете сами (сперва надо проверить, есть ли игрок с таким `id` в таблице).
     
    #33 Alex654, 4 апр 2019
    Последнее редактирование: 4 апр 2019
  9. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    спасибо вам большое
     
  10. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    Не за что.

    Да, если у вас в таблице есть поле `id` с AUTO_INCREMENT, и вы гарантированно не имеете "скачков" в нумерации игроков (у игроков с большими id всегда больше значение `start`), то код можно ещё слегка упростить и сделать чуть оптимизированнее по скорости (хотя тут погоды конечно не делает, так как подзапрос выполняется однократно):

    PHP:
    1. $str = "UPDATE `table` SET `sum` SET `sum`+".$amount." WHERE `id`=".$user_id."; ";
    2. $str .= "UPDATE `table` SET `start` SET `start`+".$amount." WHERE `id`>".$user_id;
    3. mysql_query($str, $db);