Получить данные базы данных в ненормализованном формате - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть три таблицы:

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

Я знаю, что могу использовать левое соединение, чтобы получить это, если я знаю идентификаторы списка, носписки являются динамическими, и я не хочу жестко кодировать это.Я могу запросить базу данных, чтобы получить списки, а затем построить запрос в php на основе этого, но есть ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 06 февраля 2019

Для меня это выглядит как простой сводный запрос:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...