Search code examples
androidsqliteandroid-studioandroid-listviewandroid-sqlite

Android Studio Sqlite same name only 1 time listing


Trying to learn Android studio. And I expect your help on this.I am adding and listing data with sqlite.

for example;

id - name - value

1 - john - 100

2 - mark - 200

3 - john - 150

4 - john - 200

5 - adam - 400

what I want to do, list only names one time.

1 - john

2 - mark

3 - adam

private void showlist() {

    ArrayList<DataListItems> contactList = new ArrayList<DataListItems>();
    contactList.clear();
    String query = "SELECT * FROM data ";
    Cursor c1 = sqlHandler.selectQuery(query);
    if (c1 != null && c1.getCount() != 0) {
        if (c1.moveToFirst()) {
            do {
                DataListItems contactListItems = new DataListItems();

                contactListItems.setid(c1.getString(c1
                        .getColumnIndex("id")));
                contactListItems.setName(c1.getString(c1
                        .getColumnIndex("name")));
                contactListItems.setValue(c1.getString(c1
                        .getColumnIndex("value")));
                contactList.add(contactListItems);

            } while (c1.moveToNext());
        }
    }
    c1.close();

    DataListAdapter contactListAdapter = new DataListAdapter(
            SiteList.this, contactList);
    lvCustomList.setAdapter(contactListAdapter);

}

Solution

  • You can use the GROUP BY name to select only one name. However, the id selected would be an arbitrary id for each group (name).

    • your code could use String query = "SELECT * FROM data GROUP BY name";

    If you wanted the first/lowest id per name then you could use min(id) in conjunction with GROUP BY NAME.

    • your code could use String query = "SELECT min(id) AS id, name, value FROM data GROUP BY name";

    You say that your expected result should be

    1 - john
    
    2 - mark
    
    3 - adam
    

    That would be more complicated (and perhaps of little use) as the id for adam is 5 not 3 (I assume that is simply a typing error).