簡體   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