#android #sqlite #cursor
#Android #sqlite #курсор
Вопрос:
Итак, я собираюсь сказать, что у меня есть три таблицы следующим образом:
POSTS POSTS_TAGS TAGS
----- ----------- --------- -------- ----- -------
| _id | title | | post_id | tag_id | | _id | title |
----- ----------- --------- -------- ----- -------
| 0 | foo | | 0 | 1 | | 0 | baz |
----- ----------- --------- -------- ----- -------
| 1 | bar | | 0 | 2 | | 1 | quux |
----- ----------- --------- -------- ----- -------
| 1 | 0 | | 2 | corge |
--------- -------- ----- -------
| 1 | 2 |
--------- --------
Есть ли какой-либо способ сформулировать запрос с помощью SQLite таким образом, чтобы у меня мог быть курсор со следующими данными в нем:
row1 = <foo, <quux, corge>>
row2 = <bar, <baz, corge>>
В отличие от:
row1 = <foo, quux>
row2 = <foo, corge>
row3 = <bar, baz>
row4 = <bar, corge>
Однако я сильно сомневаюсь, что есть что-то, что даст мне именно это, поэтому я предполагаю, что мой реальный вопрос заключается в том, каков наилучший способ сформулировать запрос, подобный этому, чтобы я мог передать его обратно в свою activity, и он смог бы вернуть все эти данные в activity? Или мне действительно нужно будет снова перебирать курсор, чтобы «забрать» все дополнительные данные и реорганизовать их самостоятельно.
Комментарии:
1. Вы нашли какое-либо решение?
Ответ №1:
Есть решение:
SELECT posts._id, posts.title, GROUP_CONCAT(tags._id) AS tags_id, GROUP_CONCAT(tags.tag_name) AS tags_name FROM posts
LEFT OUTER JOIN posts_tags ON posts_tags.post_id=posts.post_id
LEFT OUTER JOIN tags ON posts_tags.tag_id=tags.tag_id
GROUP BY posts._id;
Пожалуйста, адаптируйте запрос к вашей проблеме 🙂
Вы можете найти документацию SQLite о concat(x)
и concat(x,separator)
здесь.
В любом случае вы также можете следить за моей проблемой в группе Google.
Комментарии:
1. Хотя это на самом деле не решает проблему в общем случае (поскольку создает строку из всех тегов), это служит мне для моих целей, поскольку теги должны не содержать запятых.
2. Не является фактическим решением проблемы