在RecyclerView中显示两个LEFT JOIN表

时间:2019-03-07 19:58:55

标签: java android

我有以下结构的sqlite DB:

SHIFTS_TABLE
_id
name
..

FACTORS_TABLE
_id
shiftId
..

具有一对多关系(Shift可以有许多因素)。
我想在RecyclerView中显示所有班次信息的列表,包括有关其因素的信息。

我在我的应用程序中使用ContentProvider。我将游标传递给RecyclerViewAdapter。目前,我在ContentProvider中使用带有LEFT JOIN语句的查询来检索所有相关的班次和因素。但是,此查询只是返回包含所有Shift的光标,并且每个移位包含一个因子。我如何获得所有因素?

MyContentProvider.java中查询方法的片段(最后一部分)

case SHIFTS:
            queryBuilder.setTables(ShiftsContract.TABLE_NAME + " INNER JOIN " + ProjectsContract.TABLE_NAME
                    + " ON " + ProjectsContract.TABLE_NAME + "." + ProjectsContract.Columns._ID
                    + " = " + ShiftsContract.TABLE_NAME + "." + ShiftsContract.Columns.PROJECT_ID

                    + " INNER JOIN " + ClientsContract.TABLE_NAME
                    + " ON " + ClientsContract.TABLE_NAME + "." + ClientsContract.Columns._ID
                    + " = " + ProjectsContract.TABLE_NAME + "." + ProjectsContract.Columns.CLIENT_ID

                    + " LEFT JOIN " + FactorsContract.TABLE_NAME
                    + " ON " + ClientsContract.TABLE_NAME + "." + ClientsContract.Columns._ID
                    + " = " + FactorsContract.TABLE_NAME + "." + FactorsContract.Columns.CLIENT_ID
            );

我可以在RecyclerViewAdapter的onBindViewHolder中单独查询因素,但是我认为那会非常低效。也许我应该以不同的方式处理此问题,或者数据库设计不佳?

0 个答案:

没有答案