Php 嵌套子查询中的MySQL变量

Php 嵌套子查询中的MySQL变量,php,mysql,mysql-variables,Php,Mysql,Mysql Variables,目前我正在开发一个包含课程和考试模块的电子学习平台。这个想法是课程之后是考试。用户可以解决几次考试(取决于考试表中的设置)。我有一个模块,我需要确定用户是否应该重定向到考试或统计页面。若用户并没有使用他所有的尝试,他应该被重定向到考试,否则就转到统计 所以这里是我的查询(稍微简化,因为外部查询的所有条件和连接在这里都不重要),它应该决定去哪里 SELECT @course_id := courses.id as id, IF( (SELECT X.attempts_count

目前我正在开发一个包含课程和考试模块的电子学习平台。这个想法是课程之后是考试。用户可以解决几次考试(取决于考试表中的设置)。我有一个模块,我需要确定用户是否应该重定向到考试或统计页面。若用户并没有使用他所有的尝试,他应该被重定向到考试,否则就转到统计

所以这里是我的查询(稍微简化,因为外部查询的所有条件和连接在这里都不重要),它应该决定去哪里

SELECT 
 @course_id := courses.id as id,
 IF(
      (SELECT X.attempts_count FROM
           (SELECT
           COUNT(exams_attempts.id) as attempts_count,
           @max_attempts := exams.max_attempts
           FROM exams
           LEFT JOIN exams_attempts ON exams.id = exams_attempts.quiz_id
           JOIN users ON exams_attempts.user_id = users.id
           WHERE exams_attempts.user_id = 12
           AND exams_attempts.course_id = @course_id
           HAVING attempts_count >= @max_attempts) as X
      ),
      'stats',
      'exam'
 ) as redirect 
FROM courses
WHERE courses.id = 1
出于测试原因,我将课程限制为静态值,但在实际使用中,要查找的课程数量很大


最后,我发现它可以在本地主机上运行,但不能在服务器上运行,尽管MySql版本相同。我想知道是否有一些设置阻止我的查询被正确执行。另外,我想知道你有什么建议,也许我的想法不好,我可以重新生成该查询?

这可以实现

该交易涉及手册中的以下概念:

在下面的声明中,您 可能认为MySQL会先对@a求值,然后再对@a求值 第二项任务:

SELECT @a, @a:=@a+1, ...;
但是,涉及用户的表达式的求值顺序 变量未定义

和变量清洗。请看Baron的博客。考虑嵌套的if语句和使用<代码> LeStter()< <代码> > <代码> GuestSee(<)>代码>和<代码> CuuleSeCe()/<代码>它对安全变量处理的努力。


其中许多
mysql变量
问题可能需要一些时间才能安全编写。大概一个小时,或者半天。仅仅一次获得正确答案并不等同于生产就绪代码。不久前,我创建了一个标签,以便在我重新适应它们或编写一些时放置它们。

那篇文章实际上帮助我理解了变量并解决了我的问题。我向所有使用更高级SQL的人推荐它。