1

私の質問は: 1 つの SQL クエリで異なる値を取得する方法は? 私はこれを試しています:

SELECT 
          q.id,
          q.question_title,
          SUM(op.option_value) AS total_votes,
          COUNT(op.option_value) AS number_votes,
          tab.comments 
FROM
          questions_options AS op 
          INNER JOIN questions AS q 
                    ON (q.id = op.q_id) 
          INNER JOIN 
                    (SELECT 
                              SUM(p.unseen) AS comments 
                    FROM
                              questions_options AS p) tab 
                    ON (q.id = tab.q_id) 
WHERE op.option_value > 0 
GROUP BY q.question_title 

このクエリは完全に機能しています。真ん中の「INNER JOIN」を削除すると(つまり、ID、質問のタイトル、総投票数の評価、投票数が表示されます....

しかし、そのテーブルの別のフィールドであり、未読の(未読の)コメントの場合は「1」を取る未読のコメントも表示したい...

では、目に見えないコメント番号を入力してこれを行うにはどうすればよいでしょうか....任意のアイデアや提案...

4

2 に答える 2

3

ジャッジ・メンタルは正しいと思います。

サブクエリで「q_id」フィールドを選択して、「tab.q_id」に内部結合できるようにする必要があります。

-説明-

最初INNER JOINは次のようになります。

SELECT * FROM questions_options AS op INNER JOIN questions AS q ON (q.id = op.q_id)

..基本的に、2 つのテーブル間の関係 (および結合) は と に基づいてい questions.idますquestions_options.q_id

サブクエリについても同じ話です。

サブクエリで、SELECT ステートメント FROM "questions_options" を定義します。これは、SELECT の後に配置した列/フィールドのみを返します。

(SELECT SUM(p.unseen) AS comments FROM questions_options AS p) tab

サブクエリからのデータを使用できるようにするにはSELECT、 フィールドに移動し、メインクエリに既にquestions_options.q_idあるフィールドと結合する必要があります。questions.id

(SELECT p.q_id, SUM(p.unseen) AS comments FROM questions_options AS p) tab INNER JOIN (...subquery...) ON (q.id = tab.q_id)

したがって、サブクエリで選択しtab.q_idたを参照します。p.q_id

于 2012-05-24T07:05:26.913 に答える
1

私が正しいかどうかはわかりませんが、ここで何かを見つけました。
OPのクエリを何度も読むと、2番目の内部結合が必要ないことがわかります。q.id = tab.q_id question question_options`に基づいてテーブルから質問しているので、最初にそれ自体を
入れることもできます。 お役に立てば幸いです。sum(p.unseen) as commentsselectquestions_options, which by itself comes in the first inner join betweenand

于 2012-05-24T07:18:49.993 に答える