从阅读中我已经明白实现我的多对多关系的方法是有一个单独的“路由表”。这是我如何做到这一点的一个例子:
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));
在我的数据库助手类中,我想要一个方法,将Cursor返回到具有特定标记的 Cursor fetchPlaces(int tagID)的Places中的所有行。 (允许在应用内按标签过滤)
实施此功能的正确/最佳方式是什么?
我打算查询RoutingTable_PlacesTags,使用返回的Cursor为Places创建一个数组/ ID列表,然后让我调用另一个方法来传递一个id的列表/数组,它们全部返回它们。虽然我知道这会起作用,但我确信必须有一个更清洁的方法吗?
感谢。
答案 0 :(得分:5)
我认为你可能意味着多对多的关系,而不是一对多。
假设您这样做,您可以使用一个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'
))