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;