以非规范格式获取数据库数据

时间:2019-02-06 08:49:37

标签: mysql join

我有三个表:

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中构建查询,但是有没有更有效的方法?

1 个答案:

答案 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;