繁体   English   中英

MAX和COUNT个SQL查询

[英]MAX and COUNT sql query

我需要知道如何使用MAX()COUNT()查询来显示“ fiser”表条目,这些条目包含来自“产品”表的主“ codp”键,具体取决于先前选择的时间段?

餐桌产品codp ,denp;

订单codccodp ;

返回codr ,datar, codccodp

<?php 

if(isset($_POST['add'])){

    $sql = "SELECT p.denp, a.datar,MAX(p.codp) 
            FROM ( SELECT COUNT(p.codp) FROM products p ) products p
                INNER JOIN orders o ON p.codp=o.codp
                INNER JOIN returns r ON o.codc=r.codc 
            WHERE  r.datar>=STR_TO_DATE('".$_POST['d1']."','%Y-%m-%d') 
            AND r.datar<=STR_TO_DATE('".$_POST['d2']."','%Y-%m-%d')  ";

    $result = mysqli_query($conn, $sql);
    $queryResult = mysqli_num_rows($result);
    if($queryResult > 0 ){
        while ($row = mysqli_fetch_assoc($result)) { 
            echo "
                <table border=1 >
                <tr>
                    <td><p> ".$row['codp']." </p></td>
                    <td><p> ".$row['denp']." </p></td> 
                    <td><p> " .$row['codr']." </p></td>
                    <td><p> " .$row['datar']." </p></td>
                    <td><p> " .$row['codc']." </p></td>
                </tr> </table> ";
        }   

    } else { 
        echo " No results!" ;
    }
}
?>

您应该将group by用于codp并加入相关结果,例如:

$sql = "SELECT p.denp, r.datar,MAX(p.cnt_codp) 
    FROM ( 
          SELECT codp, COUNT(*)  as cnt_codp FROM products  
          group by codp
    ) products p
    INNER JOIN orders o ON p.codp=o.codp
    INNER JOIN returns r ON o.codc=r.codc 
  WHERE  r.datar>=STR_TO_DATE('".$_POST['d1']."','%Y-%m-%d') 
      AND r.datar<=STR_TO_DATE('".$_POST['d2']."','%Y-%m-%d')  
   GROUP BY p.denp, r.datar ";

并且您应该检查您的数据库驱动程序以获取param bindig,而不是在sql中使用php var(您有进行sql注入的风险)

并且您还应该对未汇总的列使用group by或重新查询是否需要与最大结果相关的值(在SQL AI中,对于SQL Server的最新版本,已弃用没有正确分组的列的聚集函数的用法)不允许使用mysql)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM