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

时间:2016-05-05 07:22:38

标签: php mysql

    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帮我解决这个问题???

1 个答案:

答案 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;