Maison > Questions et réponses > le corps du texte
J'ai 3 tables MySQL et je souhaite les réunir.
Cours :
CREATE TABLE `library_classes` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; INSERT INTO `library_classes` (`id`, `name`) VALUES (1, 'Tolkien'), (2, 'CS Lewis');
Conversation :
CREATE TABLE `library_sessions` ( `id` int NOT NULL AUTO_INCREMENT, `class_id` int NOT NULL, `session_timestamp` timestamp NOT NULL, PRIMARY KEY (`id`), KEY `class_id` (`class_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; INSERT INTO `library_sessions` (`id`, `class_id`, `session_timestamp`) VALUES (1, 1, '2023-08-01 15:30:00'), (2, 2, '2023-08-02 10:15:00'), (3, 1, '2023-08-04 09:30:00');
Réservation :
CREATE TABLE `library_bookings` ( `id` int NOT NULL AUTO_INCREMENT, `session_id` int NOT NULL, `email` varchar(255) NOT NULL, `datetime_submitted` timestamp NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; INSERT INTO `library_bookings` (`id`, `session_id`, `email`) VALUES (1, 1, 'jose@gmail.com'), (2, 2, 'jane@yahoo.com'), (3, 2, 'john@hotmail.com');
Lorsque jose@gmail.com
est connecté, je veux que ma page ressemble à ceci :
Tolkien | 2023-08-01 15:30:00 | CANCEL CS Lewis | 2023-08-02 10:15:00 | BOOK NOW Tolkien | 2023-08-04 09:30:00 | BOOK NOW
P粉0605283262023-09-12 00:39:00
J'ai importé vos données dans SQLFIDDLE;
La requête suivante vous donnera les résultats attendus.
select lc.name, ls.session_timestamp, if(lb.id is null, 'BOOK NOW', 'CANCEL') as booking_status from library_classes lc join library_sessions ls on lc.id = ls.class_id left join library_bookings lb on ls.id = lb.session_id and lb.email = 'jose@gmail.com' order by ls.session_timestamp;
Le résultat attendu qu'il donne est :
name session_timestamp booking_status Tolkien 2023-08-01T15:30:00Z CANCEL CS Lewis 2023-08-02T10:15:00Z BOOK NOW Tolkien 2023-08-04T09:30:00Z BOOK NOW