За последние 24 часа нас посетили 20965 программистов и 1129 роботов. Сейчас ищут 369 программистов ...

Queue

Тема в разделе "PHP для профи", создана пользователем S_t_e_e_p, 29 июл 2020.

  1. S_t_e_e_p

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

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Приветствую, собсна такой вопрос :)

    Есть таблица posts в БД и в ней поле last_post_user_id
    Вот как предотвратить чтобы если юзеры одновременно отправили сообщение то в поле last_post_user_id записался именно user_id последнего юзера кто отправил пост а не других ?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.816
    Симпатии:
    735
    Адрес:
    Татарстан
    ничего не понятно
    - какая структура таблицы posts ?
    - за что отвечает поле last_post_user_id ?
     
  3. S_t_e_e_p

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

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    last_post_user_id должно заносится id юзера кто оставил последнее сообщение в теме
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @S_t_e_e_p, операции создания сообщения и обновления даты в таблице выполняются в одной транзакции, то есть действие атомарно?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.816
    Симпатии:
    735
    Адрес:
    Татарстан
    ну а код конечно же мы не увидим.. "догадайтесь сами, что я и как делаю"
    да?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Ну не бывает реально "одновременных" событий. Кто запишет позже, тот и сохранится. Что не так?
    --- Добавлено ---
    Если добавить подробностей (не уверен что они вообще тут нужны), то сохранит своё тот, кто позже стартовал транзакцию. Это нормально. Ненормально что мы должны гадать: а в чём собственно проблема?
     
  7. Poznakomlus

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

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    используйте тригеры базы данных
     
  8. twim32

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

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Делаете колонку created_at с автоматическим TIMESTAMP и дальше уже воротите как хотите
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Вот в таблице тем и заводите такое поле. Вместо id юзера в нем можно хранить id поста, т.к. кроме юзера может понадобиться и др. инфа, например время создания/обновления поста, ссылка на пост и т.п. Такой кеш можно обновлять триггерами БД, о чем выше написали.
    --- Добавлено ---
    P.S. «Оставил последнее сообщение» – это понятие растяжимое даже для однократно сохраняемого поста. Во многих системах, например в данном форуме, создание поста и сохранение текста поста выполняются двумя отдельными запросами.