php - INNER JOIN 总是返回 1 行(即使它是空的)?

标签 php mysql inner-join

我有一个方法可以从我正在创建的锦标赛系统返回数据。我遇到一个问题,无论 WHERE 子句是否为真,INNER JOIN 查询总是返回一行。

数据库中有两场锦标赛,两者的 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 中,COUNT(与其他聚合函数一样)将始终返回结果。您可以使用GROUP BY来解决这个问题,它将返回每行的聚合结果。您可能想使用 GROUP BY 中列出的列,但可能类似于:

$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}'
                  GROUP BY T.id,T.name,T.description,T.checkin,date") or die(mysql_error());

关于php - INNER JOIN 总是返回 1 行(即使它是空的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514981/

相关文章:

php - 使用php从两个不同的mysql表中回显数据

mysql - SQLite 查询单行上的 SET 变量

sql-server - SQL Server 条件联接

两个表之间的 MySQL 内部连接

mysql - 多个INNER JOIN子查询sql

php - 使用 MySQL INTO OUTFILE 不写入 tmp

php - 为什么 `mysqli_query()` 返回 null?我怎样才能弄清楚?

php - 允许 Apache-PHP 写入文件夹需要什么权限?

php - 组合两个都实现 __() 国际化函数的 PHP 框架

php - 使用 HTTP Session VS 序列化 JSON 数组来存储 SQL 结果