问题描述
我是Stackoverflow的新手,我可以说是MysqL的PHP新手。
我将DataTables与PHP和MysqL一起使用以显示客户信息。
一切正常,除了搜索部分,我必须搜索由于MysqL sum函数导致的sql Error(1111):无效使用组函数,导致我搜索总销售额列。
我知道sum是MysqL的聚合函数,在where子句中不起作用。
如何解决此查询?
SELECT sql_CALC_FOUND_ROWS CONCAT(clienti.nume,' ',clienti.prenume),clienti.telefon,clienti.email,(
SELECT COUNT(*) AS num
FROM cosuri
WHERE STATUS='closed' AND uid=clienti.id),clienti.created,clienti.lastauth,SUM(CASE WHEN ROUND((
SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount
FROM comenzi
WHERE COS=cosuri.id_cos AND STATUS='closed'),2) < comanda_minima THEN ROUND((
SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)- discount
FROM comenzi
WHERE COS=cosuri.id_cos AND STATUS='closed'),2) +transport ELSE ROUND((
SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount
FROM comenzi
WHERE COS=cosuri.id_cos AND STATUS='closed'),2) END)
FROM clienti
LEFT JOIN cosuri ON cosuri.uid=clienti.id
WHERE (LCASE(id) LIKE '%400%' OR LCASE(CONCAT(clienti.nume,clienti.prenume)) LIKE '%400%' OR LCASE(clienti.telefon) LIKE '%400%' OR LCASE(clienti.email) LIKE '%400%' OR LCASE(clienti.created) LIKE '%400%' OR LCASE(clienti.lastauth) LIKE '%400%' OR LCASE(SUM(CASE WHEN ROUND((
SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount
FROM comenzi
WHERE COS=cosuri.id_cos AND STATUS='closed'),2) < comanda_minima THEN ROUND((
SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount
FROM comenzi
WHERE COS=cosuri.id_cos AND STATUS='closed'),2) END)) LIKE '%400%') AND 1
GROUP BY id
ORDER BY CONCAT(clienti.nume,clienti.prenume) ASC
LIMIT 0,10
$columns = array(
"CONCAT(clienti.nume,clienti.prenume)","clienti.email","clienti.telefon","(SELECT count(*) AS num FROM cosuri WHERE status='closed' AND uid=clienti.id)","clienti.created","clienti.lastauth","SUM(CASE WHEN ROUND((SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount FROM comenzi WHERE COS=cosuri.id_cos AND STATUS='closed'),2) < comanda_minima THEN ROUND((SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount FROM comenzi WHERE COS=cosuri.id_cos AND STATUS='closed'),2) +transport ELSE ROUND(( SELECT SUM(CASE WHEN pret_redus=0 THEN pret_total*cantitate ELSE pret_redus*cantitate END)-discount FROM comenzi WHERE COS=cosuri.id_cos AND STATUS='closed'),2) END)"
);
/*
* Filtering
* NOTE this does not match the built-in DataTables filtering which does it
* word by word on any field. It's possible to do here,but concerned about efficiency
* on very large tables,and MysqL's regex functionality is very limited
*/
$sWhere = "";
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") {
$searchTerms = explode(" ",addslashes(trim($_GET['sSearch'])));
$searchCondition = " LCASE(:search) LIKE '%" . strtolower(implode("%' AND LCASE(:search) LIKE '%",$searchTerms)) . "'";
// $sql .= " WHERE " . $searchCondition;
$sWhere = "WHERE (";
for ($i = 0; $i < count($columns); $i++) {
if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true") {
$sWhere .= " LCASE(" . $columns[$i] . ") LIKE '%" . strtolower(implode("%' AND LCASE(" . $columns[$i] . ") LIKE '%",$searchTerms)) . "%' OR";
}
}
$sWhere = substr_replace($sWhere,"",-3);
$sWhere .= ')';
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)