3

我正在使用 play 2.0 框架编写网站。解析结果时出现问题。这个对 mysql db 的请求会获取每集添加到数据库中的所有链接(每集可以有几个)以及关于剧集和动漫的所有信息。

  def lastReleasedLink(limit:Long=5):List[(((Episode,Anime),Link),Genre)] = {
    DB.withConnection { implicit c =>
      SQL(
        """
          select * from yas_episodes as a
          inner join anime as b on a.ep_anime_id=b.id
          left outer join yas_links as c on a.ep_id=c.ep_id
          LEFT JOIN yas_animes_genres AS d ON a.ep_anime_id = d.ag_anime_id
          INNER JOIN yas_genres AS e ON e.g_id = d.ag_genre_id
          where c.ep_id IS NOT NULL group by c.ep_id order by c.date desc limit {limit}
        """).on('limit ->limit)as(Episode.simple~Anime.simple~Link.simple~Genre.simple map{
        case episode~anime~link~genre => episode -> anime -> link -> Genre
      } *)
    }
  }

返回值是类型,List[(((Episode,Anime),Link),Genre)] 但我如何才能将输出形成到让说 List[episode,anime,Seq[links]]List[episode,anime,Seq[Genres],Seq[links]]不知道将流派放在哪里的列表中。

您可以想象,当您每集有两个链接时,表格anime 和yas_episodes 的信息将被复制到每一行。所以我需要按情节记录以某种方式将它们堆叠在一起(组)。然后就可以迭代列表并访问所有对象。

如您所见,在请求中,动画与流派之间存在多对多的关系。我不知道如何将所有内容放在一个列表中以便能够在视图中访问它。流派应该是动漫模型的一部分吗?

4

1 回答 1

2

似乎实现此目的的首选方法是使用 Scala 集合 API,请参阅Guillaume Bort 的这篇文章

在你的情况下,我认为你可以做类似的事情

lastReleasedLink groupBy { case (((e, a), l), g) => (e, a) }

按(情节,动漫)分组。一般来说,如果您将函数更改为返回 a ,这些操作可能会更容易一些List[(Episode, Anime, Link, Genre)],即

case episode~anime~link~genre => (episode, anime, link, genre)

那么您可以使用以下代码实现相同的目的:

lastReleasedLink groupBy ((_._1, _._2))
于 2012-11-07T08:22:24.093 回答