【发布时间】:2012-07-17 01:44:42
【问题描述】:
我有一个方法可以从我正在创建的锦标赛系统中返回数据。我有一个问题,即 INNER JOIN 查询总是返回一行,无论 WHERE 子句是否为真。
在数据库中有两个锦标赛,都有一个 T.game = '1' - 但是如果我检查 T.game = '2' 的查询,它仍然根据mysql_num_rows() 返回一行,当我print_r() 结果数组,除了 COUNT() 行之外它是空的,但 WHERE 子句不应该找不到任何行并将其相应地描绘为mysql_num_rows() 吗?
我想我的主要问题是如何阻止 COUNT(P.id) 始终显示,即使锦标赛表中没有匹配的行
public function fetchTournaments($gameID){
if($gameID == "" || $this->hasChar($gameID) || $this->hasSymb($gameID)){
$this->_errorMsg = "Invalid Game ID.";
return false;
}else{
$query = mysql_query("SELECT
T.id,
T.name,
T.description,
T.checkin,
DATE_FORMAT(T.date,'%b %d, %Y @ %h:%i %p') AS date,
COUNT(P.id) AS playernum
FROM tournaments T
INNER JOIN players P
ON T.id = P.tourney_id
WHERE T.game='{$gameID}'") or die(mysql_error());
$result = mysql_num_rows($query);
if($result > 0){
echo $result;
$output = mysql_fetch_array($query);
return $output;
}else{
$this->_errorMsg = "There are no tournaments for this game.";
return false;
}
}
}
【问题讨论】:
-
另外请不要提及我不应该使用mysql_*函数,我还没有更改为使用准备好的语句的对象。
-
你能在某处添加“HAVING COUNT(P.id) > 0”吗?
-
谢谢你的工作,我意识到我还有另一个问题 - COUNT(P.id) 总是返回完整的表,而不仅仅是我使用 INNER JOIN 设置的表。想法?
-
这就是您使用“GROUP BY T.id, T.name, T.description, T.checkin, T.date”的地方这样您就可以将聚合函数(计数)应用于分组创建。如果您不指定分组,您将获得整个表格。 (在某些 SQL 风格中,没有显式分组会导致您的情况出错。)
-
问题出在SQL查询,而不是PHP代码。您能否编辑您的问题以提供
CREATE TABLE和INSERT ... VALUES语句形式的示例架构和数据?否则,我会在通过定义我自己的数据来回答您的问题时做出假设。
标签: php mysql inner-join