我在两个 AND 运算符之间使用 while 循环,但我得到语法错误


I use while loop between two AND operator But i get syntax error

    select (SELECT count(distinct t.id)
FROM test As t, package AS p, packagetestassoc as pt, course AS c, student as s
WHERE p.id = pt.packageid AND find_in_set(t.id, pt.testid) <> 0 AND 
t.status = 1 AND find_in_set(c.id,p.courseid) AND 
WHILE (ctr < i) DO
    SET ctr = ctr + 1;
    SET tmp_str = REPLACE(SUBSTRING(SUBSTRING_INDEX(str, ',',ctr), LENGTH(SUBSTRING_INDEX(str,',',ctr-1))+1),',','');
    SELECT find_in_set(tmp_str, p.courseid);
END WHILE;
AND s.id = studentid1 AND 
(p.packagecost =0 or
p.id IN (SELECT ps.packageid FROM paymentstatus AS ps WHERE ps.studentid = studentid1))) AS totaltest,

在这个过程中,我得到语法错误,任何伙伴帮助我解决这个问题???

您在查询中使用了";",这是罪魁祸首。

在 while 循环上方声明tmp_str并尝试以下部分。 创建存储过程。在此存储过程中,如下所示:

WHILE (ctr < i) DO
    SET ctr = ctr + 1;
    SET tmp_str = REPLACE(SUBSTRING(SUBSTRING_INDEX(str, ',',ctr),   
LENGTH(SUBSTRING_INDEX(str,',',ctr-1))+1),',','');
    set cond = concat(cond, ' and find_in_set(tmp_str, p.courseid) ');
END WHILE;

更新您的查询:

SET @sql = CONCAT("select (SELECT count(distinct t.id)
                  FROM test As t, package AS p, packagetestassoc as pt, course AS c, student as s
WHERE p.id = pt.packageid AND find_in_set(t.id, pt.testid) <> 0 AND 
t.status = 1 AND find_in_set(c.id,p.courseid) AND ",  cond ,"  
AND s.id = studentid1 AND 
(p.packagecost =0 or
p.id IN (SELECT ps.packageid FROM paymentstatus AS ps WHERE ps.studentid = studentid1))) AS totaltest,....";
PREPARE stmt FROM @sql;
EXECUTE stmt;