Поставить флажок, когда пользователь посещает тему: Проблема - PullRequest
0 голосов
/ 30 апреля 2011

Предположим, у меня есть своего рода форум с темами, которые пользователи / администраторы могут посещать / управлять.

Когда пользователь посещает его, сначала я проверю, существует ли тема; после того, как я поставил флажок сказать системе, если пользователь посетил эту тему.

Это будет основной код:

1        if((isset($_GET['trackid'])) && (ctype_digit($_GET['trackid']))) {
2            $query=mysql_query("SELECT date, user, zone, artist, event, data, res, complete, notes FROM topic WHERE trackid='".$_GET['trackid']."'",$mydb);    
3            if(mysql_num_rows($query)!=0) {
4                echo "Ok, The topic exist! Now I can say to the system that I have visited the topic"
5                
6                if (isset($_SESSION['nickname'])) $insert=mysql_query("INSERT IGNORE INTO recent_adds (user, trackid) VALUES ('".$_SESSION['nickname']."','".$_GET['trackid']."')",$mydb);                 
7            }
8        }

Теперь предположим, что User A прибывает в строку 4, а между тем администратор (User B) удаляет эту тему (для специальной функции для администраторов, но это не так много значит): она вставит противоречивые данные в базу данных. (на самом деле эта тема больше не будет существовать).

Каким образом основной форум / система, выполняющая подобные операции, избавляется от этой проблемы параллелизма?

1 Ответ

1 голос
/ 30 апреля 2011

Вы можете использовать FOREIGN KEYS, чтобы запретить вставку всего, что было удалено. Тогда вы также получите выгоду от каскадного удаления.

Другое решение - запустить пакетное задание, которое удаляет противоречивые данные. В соответствии с этим решением, действительно не удаляйте тему. Просто пометьте его как удаленный с помощью флага состояния и удалите его позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...