我有三个表:
CREATE TABLE Volunteers (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) NOT NULL,
phoneNumber varchar(100) NOT NULL,
PRIMARY KEY (id),
)
CREATE TABLE Lists (
id int(11) NOT NULL AUTO_INCREMENT,
listName varchar(50) NOT NULL,
PRIMARY KEY (id)
)
CREATE TABLE VolunteerLists(
list int(11) NOT NULL,
volunteer int(11) NOT NULL,
PRIMARY KEY (list,volunteer),
FOREIGN KEY (list) REFERENCES Lists(id),
FOREIGN KEY (volunteer) REFERENCES Volunteers(id),
)
然后我在志愿者表中:
1, David, 555-5555555
2, Joe, 444-4444444
在列表表中:
1, visitors
2, deliveries
3, cleaning
在“志愿者列表”表中:
1,1
1,2
2,1
2,3
如何获取以下格式的数据:
VolunteerID VolunteerName visitors deliveries cleaning
1 David TRUE TRUE FALSE
2 Joe TRUE FALSE TRUE
我知道如果我知道列表ID,可以使用左Join来获取它,但是列表是动态的,我不想对其进行硬编码。 我可以查询数据库以获取列表,然后基于该列表在php中构建查询,但是有没有更有效的方法?
答案 0 :(得分:0)
对我来说,这似乎是一个基本的枢纽查询:
SELECT
v.id AS VolunteerID,
v.name AS VolunteerName,
CASE WHEN COUNT(l.listName = 'visitors') > 0
THEN 'TRUE' ELSE 'FALSE' END AS visitors,
CASE WHEN COUNT(l.listName = 'deliveries') > 0
THEN 'TRUE' ELSE 'FALSE' END AS deliveries,
CASE WHEN COUNT(l.listName = 'cleaning') > 0
THEN 'TRUE' ELSE 'FALSE' END AS cleaning
FROM Volunteers v
INNER JOIN VolunteerLists vl
ON v.id = vl.volunteer
INNER JOIN Lists l
ON vl.list = l.id
GROUP BY
v.id,
v.name;