簡體   English   中英

如何對SQL查詢中的兩個字段求和並為該SUM創造條件

[英]How to SUM two fields within an SQL query and make a condition for that SUM

我有一個桌子students和一個桌子room

room表包含一個capacityField (int)和margeField (int)可以支持多少學生。

例如:

capacityField : 100
margeField : 12

我想檢索capacityField + margeField大於或等於學生總數的rooms

我做了這個查詢:

public function fetchSalle(){
    $cmod = $_GET['cmod'];
    $sth = $this->db->prepare("SELECT * FROM etudiants AS etd INNER JOIN filieres AS flr WHERE etd.id_filiere=flr.id_filiere AND etd.id_filiere=$cmod");
    $sth->execute();
    $total = $sth->rowCount();      

    $stmt = $this->db->prepare("SELECT *, (capaciteField + margeField) AS Sum FROM salles WHERE Sum>=$total");      
    $stmt->execute();

    return $stmt->fetchAll();       
}

但是我不工作

您不能將同一查詢的SELECT別名放在其WHERE子句中。 您要么必須使用HAVING

SELECT *, (capaciteField + margeField) AS Sum 
FROM salles 
HAVING Sum>=$total

否則您必須重復計算:

SELECT *, (capaciteField + margeField) AS Sum 
FROM salles 
WHERE (capaciteField + margeField) >= $total

順便說一句,您可以將兩個查詢合並為一個:

SELECT s.*, (capaciteField + margeField) AS Sum
FROM salles AS s
JOIN (SELECT COUNT(*) AS total
      FROM etudiants AS e
      JOIN filieres AS f ON e.id_filiere = f.id_filiere
      WHERE e.id_filiere = $cmod) AS t
WHERE (capaciteField + margeField) > total

另外,您應該學習使用准備好的查詢和bindParam而不是將變量替換為SQL字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM