考虑我的Ajax调用是什么样的(在我解释问题的代码下面):
$.ajax({
type : "GET",
url : "servlet",
data: {course_name_param:selectedOption},
dataType:"json",
success : function(data) {
$('#startDate').empty();
$('#startDate').append('<option value="">Select Start Date</option>');
$.each(data, function(index, jsonData) {
/*Here below is where I check availability*/
if(jsonData.students_registered < jsonData.max_size){
/*Display available courses*/
}
}
我有一个MySQL表,其中包含有关可用于教育课程的课程的信息。其中1个字段是可用的插槽(最大容量)。
注册是一个插入声明。我需要通过检查插入时实际可用的插槽来控制它。
目前,我使用对此表的Ajax调用执行检查。当多个用户在时间(不到一分钟)内相对接近地加载页面时,该检查是无用的。
问题:
如何远离前端实现这一目标?
这是否应该包含在保存我的逻辑的类中 插入陈述?
我不会在SO问题中看到这种情况,只是在避免重复输入的情况下,这不是我的情况。
非常感谢任何建议。
答案 0 :(得分:1)
您可以简单地构建查询,以便只使用打开的插槽撤回课程。这样的事情可能会给你一个想法:
SELECT courses.title
FROM courses
WHERE students_registered < max_size
如果要确保对数据库进行验证,可以使用条件插入:
INSERT INTO enrollments(course_id, student_id)
SELECT <your course id>, <your student id> FROM dual
WHERE EXISTS (
SELECT * FROM courses
WHERE id = <your course id>
AND students_registered < max_size
)
答案 1 :(得分:0)
A&#34;插入之前&#34;触发用户插入的表。我采用这种方法。然后在应用程序中处理SQLException:
CREATE DEFINER=`root`@`localhost` TRIGGER before_insert_registration
BEFORE INSERT ON registration
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
Declare x INTEGER;
SET x = NEW.course_id;
SELECT
COUNT(*)
INTO num_rows FROM courses
WHERE
course_id = NEW.course_id
AND maxsize > students_registered;
IF num_rows < 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Testing Custom Fail-Over';
END IF;
END