作成しているトーナメントシステムからデータを返すメソッドがあります。WHERE句がtrueであるかどうかに関係なく、INNERJOINクエリが常に1行を返すという問題があります。
データベースには2つのトーナメントがあり、どちらも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;
}
}
}