微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL DataTables搜索SUM结果

如何解决MySQL DataTables搜索SUM结果

我是Stackoverflow的新手,我可以说是MysqLPHP新手。
我将DataTables与PHPMysqL一起使用以显示客户信息。
一切正常,除了搜索部分,我必须搜索由于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

这是用于搜索PHP部分

$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 举报,一经查实,本站将立刻删除。