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

Mysqlネストされた選択

    前の質問に回答を追加しました。理解のために、最初にそれを参照してください。

    bb_ratingsからは取得できません それをグループ化してハッキングすることによって一人で。リレーショナルセット(リレーショナルモデルの中心的な概念)ではなく、グリッドの観点から考えているため、Nullが発生します。

    1. クエリを処理するために移動するテーブルを決定する前に、結果セットの構造に必要なものを決定する必要があります。

    2. 次に、WHEREで(どの行に)制約します 条項。

    3. 次に、列を取得する場所(どのテーブル)を特定します。より多くのテーブルに結合し、WHEREでより多くの作業を行う 句;または、外部クエリに関連付けられたスカラーサブクエリ。

    あなたはあなたが何を望んでいるのかはっきりしていません。前の質問と同じレポートに加えて、特定のユーザーの投票の列が必要なようです。私にとって、結果セットの構造は速報のリストです。ええと、私はそれをbulletinから得ることができます 、bulletin_likeに移動する必要はありません 次に、それをグループ化する必要があります。

    セットの観点から考えると、非常に簡単で、マテリアライズドビューや「ネストされた」クエリでフープを飛び越える必要はありません。

    SELECT name AS bulletin, 
        (SELECT COUNT(like) 
            FROM  bulletin_like bl 
            WHERE bl.bulletin_id = b.bulletin_id 
            AND   like = 1
            ) AS like,
        (SELECT COUNT(like) 
            FROM  bulletin_like bl 
            WHERE bl.bulletin_id = b.bulletin_id 
            AND   like = 0
            ) AS dislike,
        (SELECT COUNT(like) 
            FROM  bulletin_like bl 
            WHERE bl.bulletin_id = b.bulletin_id 
            AND   bl.user_id = {$user_d}
            AND   like = 1
            ) AS your_vote
        FROM bulletin b

    コメントへの回答

    あなたの言っていることがSQLへのアプローチにとって非常に重要だと感じています

    1. そのとおり。正しいことを前もって学ぶ気があるなら、それは次のようになります:

      • 後であらゆる種類の問題を保存します
      • クエリをより効率的にする
      • より速くコーディングできるようにします
    2. 今のところ、結果セットをテーブル(はるかに遅い)および一時テーブル(データベースが正規化されている場合は絶対に必要ありません)として使用することを忘れてください。あなたは大いに テーブルを直接クエリする方がよいでしょう。リレーショナルモデルなど、さまざまなテーマを学ぶ必要があります。 SQLの使用方法。どのようにない 問題を回避するためにSQLを使用する。など。私は喜んであなたを助け、しばらくあなたと一緒にいますが、あなたが喜んでいることを知る必要があります。少し前後する必要があります。このサイトには少しノイズがありますので、他のコメントは(最後まで)無視して、あなたのコメントにのみ返信します。

      • GROUP BYの使用を停止する 、SQLの理解を著しく妨げています。 GROUP BYを使用せずに必要なレポートを取得できない場合 、質問してください。
    3. この投稿された質問。どの時点で迷子になったのか教えてください。その時点から詳細を説明します。

      • この質問では、いいねを含む掲示板のリストが必要です。嫌い;そしてこのユーザーは好きです。あれは正しいですか ?私が提供したコードを試しましたか?
    4. リンクされた質問を見てください。それは混乱であり、誰もより深い問題に取り組んでいません。彼らは、単独で、表面上の問題に答えました。あなたは今答えを持っていますが、あなたはそれを理解していません。それは進歩するのに非常に遅い方法です。


    1. CHAR / VARCHARインデックスを使用すると、MySQLクエリのパフォーマンスが非常に悪いのはなぜですか?

    2. php mysqljqueryajaxで選択ボックスを更新する方法

    3. PHPはデータベースから画像を表示します

    4. 複数のタグで選択