我有一个用户列表和一个疫苗列表,我想跟踪用户拥有哪些疫苗,所以我也有一个疫苗用户表。我想在视图中显示复选框列表、疫苗名称以及用户是否接种了该特定疫苗。
我目前正在使用 ListActivity,我知道它会回收视图,因此我需要将数据放在光标中,这给我带来了一些麻烦,因为我只想跟踪谁接种了哪种疫苗,而不是全部用户没有的疫苗。
所以我想要这样的东西:
userId vaccineId hasVaccine
1 2 0
1 2 1
我有表 user、vaccine、vaccine_user 并且我可以查询用户拥有哪种疫苗,但是 hasVaccine=0 行给我带来了麻烦,因为我不存储用户没有哪种疫苗。
编辑:我认为左外连接在正确的轨道上,我试过这个:
SELECT v.name, u._id as userId, vu._id as vaccineId FROM user u LEFT OUTER JOIN vacc_user vu ON u._id = vu.userId LEFT OUTER JOIN vaccine v ON v._id = vu.vaccineId WHERE u._id = 4;
我认为它应该导致这个
name userId vaccineId
Ebola 4 2
Hepatit A 4 null
如果用户接种了埃博拉疫苗但没有接种甲肝疫苗,但我只是得到埃博拉病毒行。
编辑2:这是为sqllite3创建的当前形式的相关表,但希望也适用于MySql。
CREATE TABLE user (_id integer primary key autoincrement, name text not null default 'unnamed');
CREATE TABLE vacc_user(_id integer primary key autoincrement, userId integer not null default 0, vaccineId integer not null default 0);
CREATE TABLE vaccine (_id integer primary key autoincrement, name text default 'unnamed vacc', text text default 'no desc');