[英]mysql query to establish booked walks still available
我需要查询支持。 基本上,我有一个Walks公司的数据库。 这些表如下所示:指南-步行-参与者-计划-预订和GuideWalk,这是一个链接表。
我需要执行一个查询,该查询将提供输出数据,该数据将告诉我每次散步,有多少个地方,有多少人已预订以及有多少人可用。
任何帮助,将不胜感激。
表格如下
CREATE TABLE `Participant` (
`part_id` int(11) NOT NULL AUTO_INCREMENT,
`part_sname` varchar(20) NOT NULL,
`part_fname` varchar(15) NOT NULL,
`part_phone` varchar(20) DEFAULT NULL,
`part_email` varchar(20) DEFAULT NULL,
`part_status` varchar(45) NOT NULL,
PRIMARY KEY (`part_id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1;
CREATE TABLE `Booking` (
`bookprog_id` int(11) NOT NULL AUTO_INCREMENT,
`part_id` int(11) NOT NULL,
PRIMARY KEY (`bookprog_id`,`part_id`),
KEY `part_id_idx` (`part_id`),
CONSTRAINT `bookprog` FOREIGN KEY (`bookprog_id`) REFERENCES `Programme` (`prog_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `part_id` FOREIGN KEY (`part_id`) REFERENCES `Participant` (`part_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
CREATE TABLE `Guide` (
`guide_id` int(11) NOT NULL AUTO_INCREMENT,
`guide_fname` varchar(20) NOT NULL,
`guide_sname` varchar(20) NOT NULL,
`guide_address1` varchar(20) NOT NULL,
`guide_address2` varchar(20) DEFAULT NULL,
`guide_town` varchar(20) NOT NULL,
`guide_pcode` varchar(15) NOT NULL,
`guide_email` varchar(20) NOT NULL,
`guide_mphone` varchar(15) NOT NULL,
PRIMARY KEY (`guide_id`)
) ENGINE=InnoDB AUTO_INCREMENT=274 DEFAULT CHARSET=latin1;
CREATE TABLE `GuideWalk` (
`guide_id` int(11) NOT NULL,
`prog_id` int(11) NOT NULL,
PRIMARY KEY (`guide_id`,`prog_id`),
KEY `prog_id_idx` (`prog_id`),
CONSTRAINT `prog_id` FOREIGN KEY (`prog_id`) REFERENCES `Programme` (`prog_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `guide_id` FOREIGN KEY (`guide_id`) REFERENCES `Guide` (`guide_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `Programme` (
`prog_id` int(11) NOT NULL,
`pwalk_id` int(11) NOT NULL,
`prog_date` date NOT NULL,
`prog_stime` varchar(9) NOT NULL,
`prog_max` int(11) NOT NULL,
PRIMARY KEY (`prog_id`),
KEY `pwalk_id_idx` (`pwalk_id`),
CONSTRAINT `pwalk_id` FOREIGN KEY (`pwalk_id`) REFERENCES `Walk` (`walk_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `Walk` (
`walk_id` int(11) NOT NULL AUTO_INCREMENT,
`walk_title` varchar(15) NOT NULL,
`walk_dur` int(11) NOT NULL,
`walk_spoint` varchar(20) NOT NULL,
`walk_fpoint` varchar(20) NOT NULL,
`walk_desc` text NOT NULL,
`walkleader_1` varchar(20) NOT NULL,
`walkleader_2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`walk_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
我每天都设法输出此查询中有多少个可用的地方
SELECT prog_max AS 'Places', prog_date AS 'Day'
FROM Programme
WHERE prog_date BETWEEN '2014-07-20' AND '2014-08-03'
我真的不知道如何从这里前进
解
SELECT walk_title, DAYNAME(prog_date) AS 'Day', DATE_FORMAT(prog_date, '%D %M %Y') AS 'Date',
prog_stime AS 'Start Time', walk_spoint AS 'Meet At', walkleader_1 AS 'Guide 1',
walkleader_2 AS 'Guide 2', Booking.bookprog_id AS 'Booked', ABS(Programme.prog_id -Programme.prog_max) AS'Available',
prog_max AS 'Places'
FROM Walk, Programme
INNER JOIN Booking
ON bookprog_id=prog_id
LIMIT 10
SELECT walk_title,DAYNAME(prog_date)AS'Day',DATE_FORMAT(prog_date,'%D%M%Y')AS'Date',prog_stime AS'Start Time',walk_spoint AS'Meet At',walkleader_1 AS'Guide 1' ,walkleader_2 AS'指南2',Booking.bookprog_id AS'已预订',ABS(Programme.prog_id -Programme.prog_max)AS'Available',prog_max AS'Places'from Walk,计划内联接预订bookprog_id = prog_id LIMIT 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.