3

私はこのようなクエリを持っています:

ID    |    name                     |    commentsCount
1     |    mysql for dummies        |    33
2     |    mysql beginners guide    |    22

SELECT
    ...,
    commentsCount    // will return 33 for first row, 22 for second one
FROM
    mycontents
WHERE
    name LIKE "%mysql%"

また、すべての行のコメントの合計を知りたい:

SELECT
    ...,
    SUM(commentsCount) AS commentsCountAggregate    // should return 55
FROM
    mycontents
WHERE
    name LIKE "%mysql%"

しかし、これは明らかに合計で単一の行を返します。

これら2つのクエリを1つだけにマージしたいのですが、

私の実際のクエリは実行するのが非常に重いため (ブール全文検索、部分文字列オフセット検索などを使用するため、悲しいことに、それを 2 回実行したくありません)。

SELECT を 2 回行わずにコメントの合計を取得する方法はありますか?

!! カスタム機能大歓迎です!!

また、変数の使用は大歓迎です。私はそれらを使用したことがありません...

4

3 に答える 3

2

中間結果を一時テーブルにキャッシュしてから、このテーブルの合計を計算できます

于 2012-09-21T09:15:45.777 に答える
1

明らかな解決策の 1 つは、中間結果を別の「一時」テーブルに格納し、2 番目のステップで集計を実行することです。

別の解決策は、必要な合計を含むルックアップ テーブルを準備することです (ただし、明らかに何らかのグループ化 ID が必要です。私はそれを と呼んでいますMASTER_ID)。

CREATE TABLE comm_lkp AS
SELECT MASTER_ID, SUM(commentsCount) as cnt
FROM mycontents
GROUP BY MASTER_ID

そのテーブルの column にもインデックスを作成しますMASTER_ID。後で、次のようにクエリを変更できます。

SELECT
    ...,
    commentsCount,
    cnt as commentsSum
FROM
    mycontents as a
        JOIN comm_lkp as b ON (a.MASTER_ID=b.MASTER_ID)
WHERE
    name LIKE "%mysql%"

また、ルックアップ テーブルが比較的小さい限り、パフォーマンスに影響を与えるべきではありません。

于 2012-09-21T09:36:18.603 に答える
0

IDフィールドの1つでGROUPBYを実行すると、うまくいく可能性があります。これにより、各IDのSUM(commentsCount)が得られます。

質問のクエリは、IDフィールドがどのフィールド/テーブルに表示されるかを知るのに十分なほど詳細ではありません。

于 2012-09-21T09:20:26.667 に答える