【问题标题】:SQLite Not Display duplicates and count how many times a common value for a row appearsSQLite 不显示重复并计算行的公共值出现的次数
【发布时间】:2018-07-05 06:08:39
【问题描述】:

在我的 android 应用程序中,我的花朵有一列名为 location 的列,用于存储它们所在的城市。在返回不同城市的列表视图中,我收到包含城市位置的每朵花的单独行。相反,我想检查是否有重复项,以便我只有一行显示“洛杉矶”而不是 4。然后我希望能够导出特定城市在列中作为值出现的次数所以我可以显示它在文本视图中出现的次数(在这种情况下是这个城市的花朵数量)。

我正在使用光标来获取我正在使用的数据,但不确定如何在 Android、SQlite 界面中执行此类命令。

下面是我的光标定义

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    switch (id) {
        case LOADER_ID:
            return new CursorLoader(
                    getContext(),
                    DatabaseDescription.Flower.CONTENT_URI,
                    FROM_COLUMNS,
                    COLUMN_LOCATION + "<> ''",
                    null,
                    COLUMN_LOCATION + " ASC"
            );
        default:
            if (BuildConfig.DEBUG)
                throw new IllegalArgumentException("no id handled!");
            return null;
    }
}

我怀疑您是否需要查看我的适配器,因为光标负责我收到的内容。最重要的是要知道如何不显示重复项以及如何计算特定列中具有相同值的行数。感谢您的帮助。

【问题讨论】:

    标签: android mysql sqlite


    【解决方案1】:

    你有两件事情要做。您可能需要执行两次查询。

    要每个城市只获取一次行,您可以在列中使用 DISTINCT 关键字作为您的城市名称。

    要获取城市的行数,您可以从为查询返回的游标中获取游标大小。

    【讨论】:

    • ContentProvider 有一个选择参数,它本质上是一个内置的 WHERE 子句。它是第四个参数,我上面说的值不为空。诀窍是该格式不允许在此处简单地插入完整的 SQL 命令。
    • 您可以在 ASC 子句末尾使用 LIMIT 1 来获取每个城市的一行,并使用 cursor.size() 来确定计数。
    • LIMIT 1 似乎是一个单独的命令,根据我的尝试,它似乎必须是一个不同的参数。如果您对编写声明的方式有任何建议,我愿意接受您的意见。
    • Limit 方法不会返回列中的每个唯一值。相反,它只是限制了可以在列表中显示的值的数量。也许在我的问题中提及 contentprovider 也将有助于阐明解决方案的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多