У меня есть следующие таблицы в базе данных sqlite:
items
______
_id (PK)
name
section_subsection_id (FK)
section_subsections
______
_id (PK)
section_id (FK)
subsection_id (FK)
subsections
______
_id (PK)
name
sections
______
_id (PK)
name
Я хотел бы предоставить определенное ключевое слово для подразделов, которые будут захватывать только те, которые соответствуют этому ключевому слову в пределах ограничения, скажем, x, и подсчитывают все элементы в этом раздел И подраздел совпадают.
Я использовал несколько запросов, вот один из них:
String selectQuery = "Select subsections.name, subsections._id, temp.count as count
FROM subsections LEFT JOIN
sections_subsections ON subsections._id = sections_subsections.subsection_id
JOIN items (SELECT count(items._id) as count from items) temp
ON items.section_subsection_id = sections_subsections._id
WHERE subsections.name LIKE 'keyword' AND sections_subsections.section_id = 1 ORDER BY
subsections.name ASC LIMIT 50 OFFSET 0 ";
Когда я пытаюсь просмотреть результаты, я получаю список, соответствующий поиску по ключевому слову, но счетчик всегда отображает последнее значение счетчика из набора результатов. Когда я запускаю необработанный запрос в оболочке sqlite, я вижу правильные подсчеты в столбце с соответствующими строками, но при повторении курсора в Android/Java возникают проблемы. Или, возможно, мой запрос?
Таким образом, для ListView в приложении я получу те же значения (то есть все 20), но в оболочке я вижу count с правильным значением. На самом деле, во время итерации курсора, если я вывожу на экран count Log.d, это также все 20, но другое значение столбца name отличается. Что не так с моим запросом? Или как мне правильно перебирать таблицу с несколькими соединениями?
_id name count
---------------
1 item1 79
2 item2 30
3 item3 20
РЕДАКТИРОВАТЬ: я делаю что-то подобное на Java:
Cursor cursor = sqliteDatabase.rawQuery(selectQuery, null);
if (cursor != null) {
cursor.moveToFirst();
}
if (cursor.moveToFirst()) {
do {
SubSection subSection = new SubSection();
subSection.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID))); subSection.setSubSectionName(cursor.getString(cursor.getColumnIndex(KEY_TABLE_SUBSECTIONS_SUBSECTION_NAME)));
subSection.setRecords(cursor.getColumnIndex("count"));
subSections.add(subSection);
}
while
(cursor.moveToNext());
}