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,
在这个程序中我得到语法错误anybuddy帮我解决这个问题???
答案 0 :(得分:0)
您使用了&#34;;&#34;在您的查询中,这是罪魁祸首。
在while循环上方声明tmp_str&amp;试试下面的部分。创建存储过程。在这个存储过程中,写如下:
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;