0

私はphpを使用して、home_teamまたはaway_team列に特定の値が含まれているmysqlからクエリを実行しています。そのような値のレコードがDBに存在することを知っています。しかし、何らかの理由で、PHP または MySQL のいずれかがそうではないと言っています。私のコードは次のとおりです。

$teams = array("St. Louis",
       "NY Yankees",
       "NY Mets",
       "LA Dodgers",
       "LA Angels");

foreach($teams as $given_team)
{
    $query = mysql_query("SELECT COUNT(*) FROM current_season_games WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")or die(mysql_error());
    $count = mysql_result($query, 0);

    echo "".$count."<br />";
}

エコーされている $count 変数が正しくないことはわかっています。クエリで指定された条件に適合する DB の行をいくつか見ています。

何か案は?

ありがとう、

ランス

4

3 に答える 3

1

を使用してCOUNT(*)います。これでは、フィールドの値は得られません。 COUNT(*)通常、返される結果の数を測定するために使用されます。

実際に列名を選択するか、条件に一致する行全体を選択します。このようなもの -

SELECT * FROM current_season_games 
WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")
于 2013-01-10T22:47:06.910 に答える
0

いくつかの点を確認してください。

  • PHP は同じホストとデータベースに接続していますか? (1 つはローカル、もう 1 つはテスト サーバー上に複数のデータベースがある場合、一部の開発者にとって、これは 'DOH!' の瞬間でした。) 同じテーブルに対してクエリを実行していますか?

  • より単純なクエリをテストしてみてください。たとえば、SELECT COUNT(*) FROM current_season_gamesゼロ以外のカウントが返されるかどうかを確認してください。

  • 実行する前に、クエリを文字列に入れ、文字列をエコーアウトしてみてください

  • これは InnoDB テーブルですか? カウントしようとしている行はコミットされていますか? (行を追加するセッションは START TRANSACTION を実行し、行を挿入し、まだコミットしていませんか? (これは、複数の環境 (SQLyog と Web サーバーなど) を使用している一部の開発者にとって DOH! の瞬間です)。 REPEATABLE READ のトランザクション分離レベルのセッションでは、コミットされていない行は表示されません)

  • 大文字と小文字を区別する照合を使用するデータベース内のその列は、述語 (WHERE 句) での等価比較が大文字と小文字を区別するものと区別しないものとして処理されますか?

それらのどれもあなたの問題を解決しないかもしれませんが、問題が何であるかをもっと多くの情報なしに (ここから) 伝えることは不可能です. しかし、確認できることはいくつかあります。

于 2013-01-10T23:48:39.683 に答える
0

非推奨の関数をまだ使用している古いコードでは、通常、 functionmysql_*の使用に出くわします。mysql_num_rows()

結果セットから行数を取得します。このコマンドは、実際の結果セットを返す SELECT や SHOW などのステートメントに対してのみ有効です。INSERT、UPDATE、REPLACE、または DELETE クエリの影響を受ける行数を取得するには、 を使用しますmysql_affected_rows()

コードを次のように変更することをお勧めします-

$result = mysql_query("SELECT COUNT(*) FROM current_season_games WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")or die(mysql_error());
$count = mysql_num_rows($result);

変数名が示すように、mysql_query()関数が a を返さないことに注意してください。$query結果セットが返され、それを調べて実際のデータを取得できます。

于 2013-01-10T22:52:29.053 に答える