繁体   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