2015-05-09 33 views
0

我有多少学生的表students 和表room如何总结一个SQL查询中的两个领域并作出了一个条件为SUM

room表包含capacityField(int)和margeField(INT)可以支持。

例如:

capacityField : 100 
margeField : 12 

我要检索的roomscapacityField + margeField是supperior或等于总学生。

我做了这个查询:

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();  
} 

,但我不工作

+0

需要内部加入**上**条件 – amdixon

+0

第一个查询给我的学生总数,然后,从总数我可以作出查询检索房间(salles)是supperior或等于学生们。 如何做内连接和在哪里? “ – Devstar

+0

”不起作用“不是一个精确的错误描述,为什么不发布确切的错误。它可能与'WHERE Sum> = $ total'有关,你需要用'(capaciteField + margeField)'替换'Sum'。另外'Sum'是大多数DBMS中的关键词。 – dnoeth

回答

1

你不能把一个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字符串。

+0

非常感谢@Barmar ..你给我的两个问题都能正常工作。再次感谢你的帮助。 – Devstar

相关问题