繁体   English   中英

MySQL查询建立预定的步行仍然可用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM