Android запрашивает много-много отношений - PullRequest
2 голосов
/ 19 апреля 2011

Из прочтения я понял, что для реализации моих отношений «многие ко многим» нужно было иметь отдельную «Таблицу маршрутизации». Вот пример того, как я это сделал:

CREATE TABLE Places (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE Tags (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE RoutingTable_PlacesTags (places_id INTEGER, tag_id INTEGER, FOREIGN KEY(places_id) REFERENCES Places(_id), FOREIGN KEY(tag_id) REFERENCES tags(_id));

В моем вспомогательном классе базы данных я хочу иметь метод, который возвращает Курсор для всех строк в Местах, имеющих определенный тег, Курсор fetchPlaces (int tagID) . (Чтобы разрешить фильтрацию по тегу в приложении)

Каков будет правильный / лучший способ реализации этого?

Я собирался запросить RoutingTable_PlacesTags, использовать возвращаемый курсор для создания массива / списка идентификаторов мест, а затем вызвать другой метод, который я вызываю, передавая список / массив идентификаторов, который возвращает их все. Хотя я знаю, что это сработает, я уверен, что должен быть намного более чистый способ сделать это?

Спасибо.

1 Ответ

5 голосов
/ 19 апреля 2011

Я думаю, что вы могли бы означать отношение многие ко многим вместо одного ко многим.

Предполагая, что вы это сделаете, вы можете выполнить запрос с помощью одного оператора SQL:

SELECT name
FROM Places
WHERE EXISTS(
SELECT *
FROM RoutingTable_PlacesTags
WHERE RoutingTable_PlacesTags.places_id = Places._id
AND EXISTS (
SELECT *
FROM Tags
WHERE Tags._id = RoutingTable_PlacesTags.tag_id AND Tags.name = 'Searched for tag name here'
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...