sql >> データベース >  >> RDS >> Mysql

MySQLは複雑なクエリ結果をカウントしますか?

    問題は、クエリが期待どおりの結果を返さないことです(クエリをスタンドアロンで実行して、結果セットが期待どおりかどうかを確認することは常に役立ちます)。

    そうです、これを分解しましょう。

    カウントしないすべての投稿をカウントしようとしています そのuserIDについて、タクシーテーブルに一致するレコードがあります。ここで必要なのは、JOINです。 テーブルを取得し、postでそれらの行を取得します これは通常、結合によって除外されます。これは、左外側の結合によって実現されます

    編集済み

    SELECT p.ID, t.taxiID
    FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
    HAVING t.taxiID IS NULL
    

    そのHAVING 句は次のように言っています:対応するt.taxiIDを持たなかった結果セットの行のみ。

    このクエリを実行して、期待される行のセット(そのユーザーによるいいねまたは嫌いがない投稿)を取得した場合は、外部クエリを追加して、返された行の数をカウントできます。

    SELECT COUNT(*) as count FROM (
        SELECT p.ID, t.taxiID
        FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
        HAVING t.taxiID IS NULL
    ) a
    

    これは、countという名前の単一のスカラーを返す必要があります。この場合、次のように言うことができます:

    if ($count[0]->count > 10) { blah blah blah }
    

    2回目の編集 )この内部クエリは、タクシーテーブルで値=1であるか、値がまったくない投稿を取得します。その結果、例では4が返されます。

    SELECT p.ID, t.taxiID, t.value
    FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
    HAVING t.taxiID IS NULL OR t.value = 1
    


    1. MySqlストアドプロシージャループカーソル-構文エラー

    2. 20のヒント:ブラックフライデーとサイバーマンデーのためにデータベースを準備する

    3. MySQLの保護-安全なインストールのためのデータアクセス権限の利用

    4. MySQL CSVインポート:日時値