Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从3个不同的表中确定每个用户的总成本_Mysql_Sql_Qsqlquery - Fatal编程技术网

Mysql 从3个不同的表中确定每个用户的总成本

Mysql 从3个不同的表中确定每个用户的总成本,mysql,sql,qsqlquery,Mysql,Sql,Qsqlquery,我正在MySql(我的第一个SQL项目)中开发一个剧院预订系统。我有三张桌子: Production (contains Title, BasicTicketPrice), Performance (PerformanceDate, PerformanceTime, Title) Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber). 每个人都预订了两到三场演出的门票(通过电子邮

我正在MySql(我的第一个SQL项目)中开发一个剧院预订系统。我有三张桌子:

Production (contains Title, BasicTicketPrice), 
Performance (PerformanceDate, PerformanceTime, Title) 
Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber). 
每个人都预订了两到三场演出的门票(通过电子邮件预订)

我需要写一个查询,它将显示所有预订座位的价格,我需要输出行数,预订者的电子邮件和计算出的价格

我知道我需要连接这些表,并使查询显示一个名为computed Price的临时列,但我不知道如何计算价格

我试过这个:

SELECT DISTINCT b.RowNumber, b.Email, pr.BasicTicketPrice 
FROM booking b, production pr performance p
WHERE p.Title=b.PerfDate*b.PerfTime*b.RowNumber;

SELECT CONCAT (PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;

SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;

SELECT RowNumber, Email, CONCAT((CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID 
   FROM booking)BasicTicketPrice*BookingID);

SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID INTEGER 
FROM booking;

SELECT RowNumber FROM booking
LEFT JOIN (SELECT Title FROM performance WHERE '2017-11-01 19:00:00' Email IS NULL);
但它不起作用

有什么建议吗?如有任何意见,我将不胜感激

假设:

  • 每预订一排座位的预订量
  • 标题
    生产的合适主键
  • PerformanceDate,PerformanceTime
    性能的合适主复合键
您将按照上面假定的键将三个表连接在一起。似乎您希望根据订票人将每次演出的订票情况分组——如果是这样,您需要使用一个集合来显示座位号(我使用
group_CONCAT
来划分座位号),以及
计算购买的票并乘以票费

SELECT 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, 
   GROUP_CONCAT(RowNumber) AS BookedSeats, 
   COUNT(RowNumber) * prod.BasicTicketPrice AS TotalCost
FROM Booking b
INNER JOIN Performance per  
     ON b.PerformanceDate = per.PerformanceDate 
        AND b.PerformanceTime = per.PerformanceTime
INNER JOIN Production prod
     ON per.Title = prod.Title
GROUP BY 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, prod.BasicTicketPrice
ORDER BY prod.Title, per.PerformanceDate, per.PerformanceTime;
从技术上讲,我们应该将所有非聚合列包含在
组中,因此也会列出
prod.BasicTicketPrice

假设:

  • 每预订一排座位的预订量
  • 标题
    生产的合适主键
  • PerformanceDate,PerformanceTime
    性能的合适主复合键
您将按照上面假定的键将三个表连接在一起。似乎您希望根据订票人将每次演出的订票情况分组——如果是这样,您需要使用一个集合来显示座位号(我使用
group_CONCAT
来划分座位号),以及
计算购买的票并乘以票费

SELECT 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, 
   GROUP_CONCAT(RowNumber) AS BookedSeats, 
   COUNT(RowNumber) * prod.BasicTicketPrice AS TotalCost
FROM Booking b
INNER JOIN Performance per  
     ON b.PerformanceDate = per.PerformanceDate 
        AND b.PerformanceTime = per.PerformanceTime
INNER JOIN Production prod
     ON per.Title = prod.Title
GROUP BY 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, prod.BasicTicketPrice
ORDER BY prod.Title, per.PerformanceDate, per.PerformanceTime;

从技术上讲,我们应该在
组中包含所有未聚合的列,因此也会列出
prod.BasicTicketPrice

如果一个人预订了3张票,那么
Booking
中是否有三行,或者是否有
Quantity
列。如果不是,则每个
性能
行数是否唯一?如果一个人预订了3张票,则
预订中是否有三行,或者您是否有
数量
列。如果不是,则每个
性能
行号是否唯一?但是,我只需要输出行号、电子邮件和总价。如果我在“选择”下的第二行中取出prod.Title、per.PerformanceDate和per.PerformanceTime,并在“分组依据”和“订购依据”下执行相同操作,则它不会编译。我不确定我做错了什么。一个座位每一场演出只有一个价格。除非同一位赞助人在多场演出中保留同一座位,否则您的分组不太可能有用。我以为顾客会为他的朋友预订多个座位。你能详细说明一下吗?你说得对。一切都很有帮助。我现在只是在挣扎,因为我不需要显示演出日期、时间和标题,而只需要显示行号(基本上是座位、订票人的电子邮件和门票的总价。我的错,我应该更加小心。我意识到我做错了什么。现在一切都好了。再次感谢你的帮助。我真的非常感谢。祝你一切顺利!但是,我只需要输出行号、电子邮件和总价。如果我在“选择”下的第二行中取出产品标题“per.PerformanceDate”和“per.PerformanceTime”,并在“分组依据”和“订购依据”下执行相同的操作,它不会编译。我不确定我做错了什么。一个座位的每场演出只有一个价格。除非同一位顾客在多场演出中保留同一座位,否则您的分组是u我希望有用。我假设一位顾客会为他的朋友预订多个座位。你能详细说明一下吗?你是对的。一切都很有帮助。我现在只是在挣扎,因为我不需要显示演出日期、时间和标题,而只需要显示行号(基本上是座位、订票人的电子邮件和门票的总价。我的错,我应该更加小心。我意识到我做错了什么。现在一切都好了。再次感谢你的帮助。我真的很感激。祝你一切顺利!