Заполните счетчик из sql и сделайте результаты уникальными - PullRequest
1 голос
/ 13 января 2012

Привет мне снова (извините)

Я устаю заполнять счетчик из sqlitle, и он работает нормально, НО мой стол выглядит так:

_id | Имя | Время | ....

_id: самоинкрементное число всегда уникально Имя: это имя человека, повторяется во многих строках в этой таблице

Я хочу вставить в счетчик все имена из этой строки, но без дубликатов. как я это делаю сейчас:

private void updateSpiner () { Spinner nameSpinner = (Spinner) findViewById (R.id.spinMena);

    Cursor nameCursor = db.getNames();
    startManagingCursor(nameCursor);

    String[] from = new String[]{"Name"}; 
    int[] to = new int[]{android.R.id.text1};

    SimpleCursorAdapter nameAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, nameCursor, from, to);
            nameSpinner.setAdapter(nameAdapter);
        }

вот как я получаю данные:

public Cursor getNames(){
        final String KEY_TITLE = "Name";
        final String KEY_ROWID = "_id";
        return database.query("plan", new String[] {KEY_ROWID, KEY_TITLE}, null, null, null, null, null);
    }

может кто-нибудь объяснить мне, почему мне нужно получить _id строку для этого, я все еще сейчас на Java и не понимаю, зачем мне это нужно, за исключением того, что если я этого не сделаю, он будет жаловаться, что там нет _id.

Но он не используется в первом методе. Я получаю только имена из него ... из-за _id я не могу использовать в запросе DISTINCT = true, потому что он по-прежнему возвращает все строки, поскольку _id уникален для каждой строки ..

Может ли кто-нибудь помочь мне обернуть вокруг него голову? Я не хочу делать отдельный стол или что-то ..

Спасибо, Влад

Ответы [ 3 ]

1 голос
/ 13 января 2012

В моем случае я не мог получить эту работу с SimpleCursorAdapter. Мне нужно было использовать ArrayAdapter вместо simplecursoradapter и добавить предложение DISTINCT в запрос после удаления поля ID из запроса.Вот ссылка для обсуждения Почему поле _id необходимо для адаптера simplecursor

0 голосов
/ 13 января 2012

Может быть, вы можете использовать DISTINCT в запросе sqlite: SELECT manual

0 голосов
/ 13 января 2012

Мне кажется, что ваш стол не идеально подходит для входа Spinner.Вам необходимо нормализовать базу данных и создать новую таблицу, которая будет выглядеть примерно как nameId | name.Тогда в таблице «data» вы получите dataId | nameId | time | ....Затем вы просто загружаете свой Spinner данными из новой таблицы nameId | name.

...