0

ここStackoverflowの誰かの助けを借りて、クエリが完璧になるところまで来ました。私のニーズに合わせてクエリを調整するのに少し助けが必要です。誰かが私を助けてくれることを願っています。

これがケースです、私は次の2つのテーブルを持っています:

Tweet

Tweet_tags

すべてのツイートにはタグがあり、1 つのツイートに同じタグを複数含めることができます。ツイートが投稿されてから 1 週間以内に、同じタグが付けられたツイートの数をカウントしたいと考えています。

現在のクエリは次のとおりです。

SELECT t.id
     , s.tag
     , ( SELECT COUNT(1)
           FROM twitter.tweet_tags r
           JOIN twitter.tweet q
             ON q.id = r.tweet_id
          WHERE r.tag = s.tag
            AND q.date >= t.date
            AND q.date <= t.date + INTERVAL 7 DAY
       ) AS cnt
  FROM twitter.tweet t 
  JOIN twitter.tweet_tags s 
    ON s.tweet_id = t.id
 ORDER
    BY cnt DESC

このクエリの結果は次のとおりです。

  | ID |     Tag      | Cnt |
-------------------------------
  | 1  |  Testtag     | 2   |
  | 2  |  Testtag     | 1   |
  | 3  |  tweettag3   | 1   |
  | 4  |  tweettag2   | 1   |

私のデータベースには testtag が 2 回あるので、最初の結果は正しいです。tweettag3 と tweettag2 はデータベースに 1 回あるので、それも良いのですが、再度追加すると複数の結果が表示される可能性があります。重複した結果を取り除くためにDISTINCTonを使用しようとしましたが、これにより構文エラーが発生します。s.tag

だから私はそれがどのようになりたいかです:

  | ID |     Tag      | Cnt |
-------------------------------
  | 1  |  Testtag     | 2   |
  | 2  |  tweettag3   | 1   |
  | 3  |  tweettag2   | 1   |

誰かがこれについて私を助けてもらえますか? さらに情報が必要な場合は、そう言ってください!

ありがとう !!

編集 :

テーブルは次のようになります。

Tweet
---------------
ID
Message
users_id
Date

Tweet_tags
---------------
id
tag
tweet_id
4

2 に答える 2

3

をそのまま使用できるselect distinctため、クエリは次のようになります。

SELECT distinct s.tag
     , ( SELECT COUNT(1)
           FROM twitter.tweet_tags r
           JOIN twitter.tweet q
             ON q.id = r.tweet_id
          WHERE r.tag = s.tag
            AND q.date >= t.date
            AND q.date <= t.date + INTERVAL 7 DAY
       ) AS cnt
  FROM twitter.tweet t 
  JOIN twitter.tweet_tags s 
    ON s.tweet_id = t.id
 ORDER
    BY cnt DESC

選択から id フィールドを削除するだけです。

ID が必要な場合は、非表示の列の MySQL 機能を使用して、次のことを行うことができます。

select t.id, s.tag, . . .

group by tag
order by cnt desc
于 2013-01-18T19:14:51.007 に答える
1

このクエリを試してください

SELECT 
    t.id , 
    s.tag , 
    s.count
FROM twitter.tweet t 
JOIN (
    SELECT
        COUNT(id) as count,
        tweet_id,
        tag
    FROM tweet_tags
    GROUP BY tweet_id
) as s ON s.tweet_id = t.id
        AND  t.tag = s.tag
ORDER BY cnt DESC
于 2013-01-18T19:16:13.210 に答える