Ebean ManyToMany:模型A有ManyToMany <model b =“”>。选择计数(*)B,其中A列表中的B <b> </b> </model>

时间:2014-03-03 06:44:57

标签: mysql jpa playframework-2.0 ebean

该应用程序允许用户选择某些关键字(我们监控TwitterStream)

每个关键字都包含一个包含其关键字的推文ID列表。

public class Keyword extends Model {

@Id
int id;
String keyword;

@ManyToMany
public List<Tweet> tweets = new ArrayList();
}

public class Tweet extends Model {

@Id
int id;
    TimeStamp datetime;
}

我想通过选择计数(*)获取每个关键字每天执行情况的一些数据,日期时间按天分组。以下SQL查询将完成我需要的工作。

select datetime, count(*) from tweet t left outer join keyword_tweet on t.id=keyword_tweet.tweet_id group by cast(t.datetime as date) having t.datetime > '2014-02-02';

+---------------------+----------+
| datetime            | count(*) |
+---------------------+----------+
| 2014-02-02 13:27:45 |        1 |
| 2014-02-08 05:14:04 |        2 |
| 2014-02-09 08:34:31 |        1 |
| 2014-02-12 12:42:02 |        1 |
| 2014-02-13 06:00:09 |        2 |
| 2014-02-14 00:47:04 |        2 |
| 2014-02-15 07:26:30 |        6 |
| 2014-02-16 01:00:00 |       21 |
| 2014-02-17 00:06:50 |      916 |
| 2014-02-18 18:08:56 |        1 |
| 2014-02-19 01:28:40 |        1 |
| 2014-02-24 16:45:11 |        1 |
| 2014-02-26 14:43:54 |        4 |
| 2014-02-27 08:24:09 |        9 |
| 2014-02-28 05:08:16 |      411 |
+---------------------+----------+

如何从推文中选择*,其中Tweet.id为IN Keyword.tweets?

另外,在Ebean中如何获得仅包含日期的List和Count(*)?

谢谢你们!

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

Keyword targetKeyword = Keyword.find.byId(1L);
List<Tweets> foundTweets = new ArrayList<Tweets>();
for(Tweet tw : Tweets.find.all()) {
    if(targetKeyword.tweets.contains(tw))
          foundTweets.add(tw);
}
return foundTweets;

此代码将返回关键字ID编号1中包含的所有推文。您可以将其放在传递所需关键字ID的函数中,而不是1L。