Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 聚合函数上的SQLSTATE[42000]错误_Php_Mysql_Sql_Syntax Error - Fatal编程技术网

Php 聚合函数上的SQLSTATE[42000]错误

Php 聚合函数上的SQLSTATE[42000]错误,php,mysql,sql,syntax-error,Php,Mysql,Sql,Syntax Error,您好,我的SQL查询中出现了一个错误,无法找出问题所在。下面是在Barmar的帮助下到目前为止的查询 $query = "SELECT c.*, count(s.curso_id) as count, SUM(IF(s.status = 'aprobado', 1, 0)) AS count_approved , SUM(IF(s.status = 'cupolleno', 1, 0)) AS count_cupolleno , SUM(IF(s.status = 'cancelado

您好,我的SQL查询中出现了一个错误,无法找出问题所在。下面是在Barmar的帮助下到目前为止的查询

 $query = "SELECT c.*, count(s.curso_id) as count, SUM(IF(s.status = 'aprobado', 1, 0)) AS count_approved , SUM(IF(s.status = 'cupolleno', 1, 0)) AS count_cupolleno
    , SUM(IF(s.status = 'cancelado', 1, 0)) AS count_cancelado, SUM(IF(s.status = 'noacion', 1, 0)) AS count_noacion, SUM(IF(s.status = 'ama_de_casa', 1, 0)) AS count_ama_de_casa
    , SUM(IF(s.status = 'cliente_externo', 1, 0)) AS count_cliente_externo
    FROM cursos_modulos AS c
    LEFT JOIN subscriptions AS s ON s.curso_id = c.id
    LEFT JOIN users AS u ON u.userID = s.user_id GROUP BY c.id WHERE 1";
                if (!empty($id)) { $query .= " AND c.id = '$id'"; }
                if (!empty($ciudad)) { $query .= " AND c.ciudad = '$ciudad'"; }
                if (!empty($tipo)) { $query .= " AND c.tipo = '$tipo'"; }
                if (!empty($titulo))  { $query .=" AND c.titulo = '$titulo'"; }
                if (!empty($status))  { $query .= " AND c.status = '$status'"; }
 $paginate = new pagination($page, $query, $options);
我收到的错误消息如下:

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064您有 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在“WHERE 1和 c、 id='1'在中的第6'行限制0,30' E:\xampp\htdocs\admin\class\pagination.php:376堆栈跟踪:#0 E:\xampp\htdocs\admin\class\pagination.php(376): PDO语句->执行()#1 E:\xampp\htdocs\admin\class\pagination.php(202): 分页->执行查询()#2 E:\xampp\htdocs\admin\class\pagination.php(162): 分页->运行(1,'选择c.,cou…',数组)#3 E:\xampp\htdocs\admin\search.php(146): 分页->uu构造(1,'SELECT c.,cou…',Array)#4{main} 在E:\xampp\htdocs\admin\class\pagination.php的第行中抛出 376


where 1
对您有什么帮助?试着杀了它

以下内容不会引发1064错误:

create table cursos_modulos
(   id int not null

);

create table subscriptions
(   curso_id int not null,
    user_id int not null,
    status varchar(100) not null
);

create table users
(   userID int not null
);

SELECT c.id,
count(s.curso_id) as count, 
SUM(IF(s.status = 'aprobado', 1, 0)) AS count_approved, 
SUM(IF(s.status = 'cupolleno', 1, 0)) AS count_cupolleno, 
SUM(IF(s.status = 'cancelado', 1, 0)) AS count_cancelado, 
SUM(IF(s.status = 'noacion', 1, 0)) AS count_noacion, 
SUM(IF(s.status = 'ama_de_casa', 1, 0)) AS count_ama_de_casa,
SUM(IF(s.status = 'cliente_externo', 1, 0)) AS count_cliente_externo
FROM cursos_modulos AS c
LEFT JOIN subscriptions AS s ON s.curso_id = c.id
LEFT JOIN users AS u ON u.userID = s.user_id 
GROUP BY c.id

groupby
子句应位于
where
子句之后。即:

$query = "SELECT c.*, count(s.curso_id) as count, SUM(IF(s.status = 'aprobado', 1, 0)) AS count_approved , SUM(IF(s.status = 'cupolleno', 1, 0)) AS count_cupolleno
, SUM(IF(s.status = 'cancelado', 1, 0)) AS count_cancelado, SUM(IF(s.status = 'noacion', 1, 0)) AS count_noacion, SUM(IF(s.status = 'ama_de_casa', 1, 0)) AS count_ama_de_casa
, SUM(IF(s.status = 'cliente_externo', 1, 0)) AS count_cliente_externo
FROM cursos_modulos AS c
LEFT JOIN subscriptions AS s ON s.curso_id = c.id
LEFT JOIN users AS u ON u.userID = s.user_id WHERE 1";
            if (!empty($id)) { $query .= " AND c.id = '$id'"; }
            if (!empty($ciudad)) { $query .= " AND c.ciudad = '$ciudad'"; }
            if (!empty($tipo)) { $query .= " AND c.tipo = '$tipo'"; }
            if (!empty($titulo))  { $query .=" AND c.titulo = '$titulo'"; }
            if (!empty($status))  { $query .= " AND c.status = '$status'"; } 
$query .= " GROUP BY c.id";

它使得在最后的查询中需要考虑if条件。在mysql中,1是
true
where 1
是一种完全合法(尽管有些无用)的mysql语法。我主要根据你的分组规则将其改为
c.id
。如果你有
c.*
和分组规则,祝你好运,它可能会给出不好的答案,或者通常会。表。*应该不惜一切代价避免,除非它非常接近于丢弃代码。这看起来是正确的解决方案唯一的问题是它给了我一个错误;分析错误:语法错误,第147I行E:\xampp\htdocs\admin\search.php中的意外“$paginate”(T_变量)缺少一个
位于最后一条语句的末尾。添加它应该可以解决问题。