2015-04-09 2 views
0

Я строю викторину на PHP, в которой пользователю задают вопросы, на которые пользователь должен ответить ему ровно через 15 минут. В течение этих 15 минут этот вопрос будет отображаться как «взятый» для всех других пользователей. Если пользователь не сможет решить проблему через 15 минут, этот вопрос снова станет доступен для всех пользователей.Выполнение викторины на основе таймера в php

Я построить структуру БД как:

tbl_Question 
pkQuestionId 
question 

tbl_UserQuestion 
pkUserQuestionId 
fkQuestionId 
fkUserId 
timeStamp 

tbl_User 
pkUserId 

Подход, который я попробовал, чтобы вставить запись в tbl_UserQuestion, если пользователь хочет, чтобы ее решить, с отметкой времени. Затем задайте все вопросы от tbl_Question, которые не находятся в tbl_UserQuestion.

Я зациклился на том, как показывать вопросы другим пользователям, если первоначальный пользователь не смог его решить за 15 минут.

ответ

0

Вы можете добавить бит, чтобы определить, был ли вопрос решен или нет в таблице userQuestion, а затем в вашем запросе, чтобы узнать, какие вопросы по-прежнему доступны для других пользователей, вы видите, есть ли пользовательский запрос, (0) и прошло более 15 минут с момента отметки времени. Вам также необходимо убедиться, что после этого никто не ответил. Если вы видите этот случай, ответ не был завершен в течение 15 минут. Вам просто нужно будет обновить эту запись в течение 15 минут, чтобы ответить (1), и тогда вы узнаете, что этот вопрос больше не доступен. Другим вариантом было бы просто удалить запись из таблицы userQuestion, если пользователь терпит неудачу (если вы не хотите знать, что они потерпели неудачу)

Надеюсь, что имеет смысл.

+0

Я застрял в запросе, какой запрос мне нужен, чтобы представить вопрос всем другим пользователям, если запись конкретного вопроса уже присутствует в tbl_UserQuestion. Еще одна вещь, как я могу автоматически обновить отметку времени? Я не хочу использовать cron job – jalabi

+0

что-то вроде 'SELECT FROM tbl_Question AS Q LEFT OUTER JOIN tbl_UserQuestion AS UQ на UQ.fkQuestionId = Q.pkQuestionId WHERE UQ.fkQuestionId ИМЕЕТ NULL ИЛИ НЕ СУЩЕСТВУЕТ (SELECT UQ2.fkQuestionId FROM tbl_UserQuestion AS UQ2 WHERE fariff (mi, GETDATE(), UQ2.timeStamp) <15 ИЛИ UQ2.answered = 1' Я не уверен, что синтаксис идеально подходит для этого, поскольку я набрал его там, но в основном вы просто хотите устранить вещи с помощью ответа = 1 или в течение 15 минут. Что касается обновления временной отметки, я не уверен, что вы имеете в виду, почему бы вам ее обновить? – Nived

Смежные вопросы