在CursorAdapter中连接多个记录

Mat*_*ins 6 android join cursor adapter android-cursoradapter

我正在尝试构建一个ListView,它代表一个食谱列表.我得到了使用a SimpleCursorAdapter来实现这一目标的概念.

但是,除了显示每个项目的配方图像和标题之外,我还想显示与配方相关的逗号分隔的成分串.鉴于游标仅适用于一个表(或视图),我不太清楚如何处理这个问题.

相关表格/栏目如下:

recipes (
  _id integer primary key,
  name text not null
)

ingredients (
  _id integer primary key,
  name text not null
)

recipes_ingredients (
  _id integer primary key,
  recipe_id integer not null,
  ingredient_id integer not null
)
Run Code Online (Sandbox Code Playgroud)

编辑:关于这个问题的前两条评论让我相信没有足够的信息可以解释为什么我认为简单的JOIN是不够的.鉴于表结构,配方可以有多种成分,而不仅仅是一种.这意味着如果我尝试为单个食谱执行连接,我将最终得到如下内容:

SELECT r.name AS recipe, i.name AS ingredient
FROM recipes r
INNER JOIN recipes_ingredients ri ON ri.recipe_id=r._id
INNER JOIN ingredients i ON ri.ingredient_id=i._id;

 recipe           | ingredient
------------------+---------------------
 Chocolate Milk   | milk
 Chocolate Milk   | chocolate syrup
 Chicken Parmesan | chicken breast
 Chicken Parmesan | italian breadcrumbs
 Chicken Parmesan | egg
 Chicken Parmesan | shredded mozzarella
 Chicken Parmesan | pasta sauce
Run Code Online (Sandbox Code Playgroud)

一个简单的光标最终会显示两次"巧克力牛奶"和五次"鸡巴马干酪".这绝对不是我想要的.我想让他们每个人用逗号分隔的所有成分展示一次.即:

 recipe           | ingredients
------------------+---------------------------------------------------------------------------
 Chocolate Milk   | milk, chocolate syrup
 Chicken Parmesan | chicken breast, italian breadcrumbs, egg, shredded mozzarella, pasta sauce
Run Code Online (Sandbox Code Playgroud)

Ema*_*lin 7

你需要的是group_concat:http://www.sqlite.org/lang_aggfunc.html

这应该工作:

SELECT r._id, r.name AS recipe, group_concat(i.name, ",") AS ingredient
FROM recipes r
INNER JOIN recipes_ingredients ri ON ri.recipe_id=r._id
INNER JOIN ingredients i ON ri.ingredient_id=i._id
GROUP BY r._id;
Run Code Online (Sandbox Code Playgroud)