获取非标准化格式的数据库数据

问题描述 投票:0回答:1

我有三个表:

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

在VolunteerLists表:

1,1
1,2
2,1
2,3

我怎样才能让我的格式如下数据:

VolunteerID   VolunteerName  visitors deliveries cleaning 
1             David          TRUE      TRUE       FALSE
2             Joe            TRUE      FALSE      TRUE

我知道我可以使用LEFT JOIN得到这个,如果我知道的名单ID,但名单是动态的,我不想硬编码此。我可以查询数据库来获取列表,然后建系基于PHP的查询,但有一个更有效的方式来做到这一点?

mysql join
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.