使用可能重复输入的数据库列中的AutoCompleteTextView

时间:2012-11-30 22:18:05

标签: java android sqlite autocomplete textview

如何从数据库表中的列中提供AutoCompleteTextView的建议,这些列可能会重复某些值?

http://www.outofwhatbox.com/blog/2010/11/android-autocompletetextview-sqlite-and-dependent-fields/

http://www.outofwhatbox.com/blog/2010/11/android-simpler-autocompletetextview-with-simplecursoradapter/

在学习如何使用AutoCompleteTextView时,我浏览了以上两篇博客文章。这些非常适合介绍,但不能完全解决我的问题。我想从我的数据库中提供列的不同值作为我的应用程序中的AutoCompleteTextView的建议。当我实现上面两个例子中的代码时,我在列表中得到了重复的建议。尝试在我的查询中使用DISTINCT关键字不起作用,因为CursorAdapter在返回的结果中需要_id字段。由于每一行都有自己的_id,因此不会消除重复的值。

我正在考虑为值创建一个单独的查找表。这样做的好处是可以规范化我的数据,并且可以轻松访问不同的值以建议条目。对于我的一个AutoCompleteTextViews,我认为这将很好用,因为很可能只会使用4或5个不同的值。另一方面,它可能不会起作用,因为我不确定大数据集中会有多少不同的值。

3 个答案:

答案 0 :(得分:2)

如果你有一张桌子:

CREATE TABLE Foo(_id INTEGER PRIMARY KEY, bar TEXT);

并且只想为您可以使用的每个不同的_id选择一个bar

SELECT _id, bar FROM Foo GROUP BY bar;

答案 1 :(得分:2)

在执行sqlite select查询时尝试使用GROUP BY ...并按列名分组... 即。

 SELECT keyword FROM mytable GROUP BY keyword

答案 2 :(得分:0)

我希望这不是过度杀戮,但为什么不尝试子查询呢?

select _id, bar 
from Foo 
where bar in (
    select distinct bar
    from Foo
);

内部查询将返回“bar”中的所有不同值,然后外部查询将所有这些值与相应的“_id”匹配。