前の質問に回答を追加しました。理解のために、最初にそれを参照してください。
bb_ratings
からは取得できません それをグループ化してハッキングすることによって一人で。リレーショナルセット(リレーショナルモデルの中心的な概念)ではなく、グリッドの観点から考えているため、Nullが発生します。
-
クエリを処理するために移動するテーブルを決定する前に、結果セットの構造に必要なものを決定する必要があります。
-
次に、
WHERE
で(どの行に)制約します 条項。 -
次に、列を取得する場所(どのテーブル)を特定します。より多くのテーブルに結合し、
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へのアプローチにとって非常に重要だと感じています
-
そのとおり。正しいことを前もって学ぶ気があるなら、それは次のようになります:
- 後であらゆる種類の問題を保存します
- クエリをより効率的にする
- より速くコーディングできるようにします
。
-
今のところ、結果セットをテーブル(はるかに遅い)および一時テーブル(データベースが正規化されている場合は絶対に必要ありません)として使用することを忘れてください。あなたは大いに テーブルを直接クエリする方がよいでしょう。リレーショナルモデルなど、さまざまなテーマを学ぶ必要があります。 SQLの使用方法。どのようにない 問題を回避するためにSQLを使用する。など。私は喜んであなたを助け、しばらくあなたと一緒にいますが、あなたが喜んでいることを知る必要があります。少し前後する必要があります。このサイトには少しノイズがありますので、他のコメントは(最後まで)無視して、あなたのコメントにのみ返信します。
-
GROUP BY
の使用を停止する 、SQLの理解を著しく妨げています。GROUP BY
を使用せずに必要なレポートを取得できない場合 、質問してください。
。
-
-
この投稿された質問。どの時点で迷子になったのか教えてください。その時点から詳細を説明します。
- この質問では、いいねを含む掲示板のリストが必要です。嫌い;そしてこのユーザーは好きです。あれは正しいですか ?私が提供したコードを試しましたか?
。
- この質問では、いいねを含む掲示板のリストが必要です。嫌い;そしてこのユーザーは好きです。あれは正しいですか ?私が提供したコードを試しましたか?
- リンクされた質問を見てください。それは混乱であり、誰もより深い問題に取り組んでいません。彼らは、単独で、表面上の問題に答えました。あなたは今答えを持っていますが、あなたはそれを理解していません。それは進歩するのに非常に遅い方法です。