select distinct value in android sqlite
Asked Answered
F

4

36

I try to run the following raw query in android, it seems not work

String query ="SELECT DISTINCT category FROM event";
Cursor  cursor = mDb.rawQuery(query, null);
if (cursor != null) {
     cursor.moveToFirst();
}
return cursor; 

so I decide to use the query() method in android which are something like

Cursor mCursor = mDb.query(EVENT_TABLE, new String[] {KEY_ROWID, KEY_CAT}, null, null,null,null, null)

Can anyone show me how to select the distinct category for using query() instead of rawquery please, any help will be greatly appreciated!

Fatal answered 27/6, 2012 at 4:22 Comment(1)
You should avoid use of rawQuery whenever possible... always prefer the built in SQLiteDatabase query methods over rawQuery.Senecal
T
50

You can use this method:

public Cursor query (boolean distinct, String table, 
                     String[] columns, String selection, 
                     String[] selectionArgs, String groupBy, 
                     String having, String orderBy, String limit)

Here first argument specifies whether to use distinct or not.

Tasset answered 27/6, 2012 at 4:27 Comment(2)
so how to select distinct category, that's for select the whole row right?Fatal
Pass only category in columns[], as you just need that column in result as shown in your row query, and you will get distinct categories.Tasset
S
63

But you MUST remember to send argument in GROUPBY (NOT NULL send).

You must give column name for distinct.

Example:

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN_NAME_1 ,COLUMN_NAME_2, COLUMN_NAME_3 }, null, null, COLUMN_NAME_2, null, null, null);

true - distinct TRUE

COLUMN_NAME_2 - name column what you have be DISTINCT.

That's works for me fine.

Savour answered 14/12, 2012 at 13:17 Comment(3)
EPIC WIN ! You sir, ARE AWESOME ! I've been looking for hours for this problem, thanks a lot for your input. You really made my day.Faint
Thanks a ton! this is what I was looking for. specially to deal with contentprovider along with cursorloader. I did a small hack and this worked!Coffle
Yes, have to say thank you too. Was searching and trying many suggestions, only yours worked for me. Thank you for sharing. Keep it up.Coruscation
T
50

You can use this method:

public Cursor query (boolean distinct, String table, 
                     String[] columns, String selection, 
                     String[] selectionArgs, String groupBy, 
                     String having, String orderBy, String limit)

Here first argument specifies whether to use distinct or not.

Tasset answered 27/6, 2012 at 4:27 Comment(2)
so how to select distinct category, that's for select the whole row right?Fatal
Pass only category in columns[], as you just need that column in result as shown in your row query, and you will get distinct categories.Tasset
T
7

There are multiple ways, as already green ticked. But if somebody is looking to get it via raw query then here you go:

String query = "SELECT DISTINCT(category) FROM event";
Tailstock answered 15/12, 2015 at 15:40 Comment(0)
C
4
Cursor res=db.rawQuery("select column1 column2...  Distinct column3 from "+Table_name, null);

column3 is a distinct column

Canoodle answered 26/2, 2016 at 21:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.