【问题标题】:Ebean ManyToMany: Model A has ManyToMany<Model B> . select count(*) B where B in A's List<B>Ebean ManyToMany:模型 A 有 ManyToMany<Model B> 。 select count(*) B where B in A's List<B>
【发布时间】:2014-04-04 02:55:21
【问题描述】:

该应用程序允许用户选择某些关键字(我们监控 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;
}

我想通过 select count(*) 获取一些关于每个关键字每天执行情况的数据,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 中获得仅包含日期和计数(*)的列表?

谢谢大家!

【问题讨论】:

    标签: mysql jpa playframework-2.0 ebean


    【解决方案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。

    【讨论】:

    • 谢谢!在这种情况下,我担心效率。我的应用程序将拥有数百万条推文,加载每条推文 (#tweets) 然后迭代每条推文而不是一个 SQL 查询,这不会影响性能吗?
    • 您可以使用来自 ebean 的原始 sql:avaje.org/ebean/introquery_rawsql.html Ebean 具有内置的查询语言。您可能也想尝试一下:avaje.org/static/javadoc/pub/com/avaje/ebean/Query.html 您可以尝试这些方法并比较它们的性能。但我对 Ebean 和/或 dbms 不是很有经验。因此,如果性能被证明是一个严重的瓶颈,您可能需要寻找其他解决方案;)
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2020-11-22
    • 2012-03-18
    • 2021-10-06
    • 2021-11-28
    相关资源
    最近更新 更多