2012-04-02 101 views
0

我建立一个小型电影院订票系统PHP的Web应用程序,加入和分组SQL结果

数据库具有电影显示表。 (其中包括但并不重要)

一个显示有一个日期和时间,以及每个显示由一个电影

一个电影可以有很多看房

我试图建立一个查询,将获得所有的film_name,showing_date和showing_time,虽然我想分组的结果,所以我没有在结果中的多个电影,因为你可以有更多的临时工ñ一个在同一天显示。

我有这样的SQL:

SELECT f.film_name, s.showing_date, s.showing_time 
FROM film f, showing s 
WHERE f.film_id = s.film_id 
GROUP BY s.film_id 

但是它没有显示为每部影片,只是第一个所有的时间。我想我错过了很多,也许我应该把展示时间分成单独的表格,但是任何帮助都将不胜感激。如有必要,我会提供更多的信息和图表。

感谢

+5

你说你不想在结果中有多部电影,但你也不想为每部电影展示一个演出时间......这两个是矛盾的;你想回来的结果是什么? – 2012-04-02 16:17:17

+0

@ user1308430更好的你把你的表与一些数据和所需的输出,所以我们可以提供帮助,你的问题没有明确的意义... – 2012-04-04 07:51:28

回答

1

假设你想要每部电影一排,与同一行中的所有看房,请尝试:

SELECT f.film_name, group_concat(concat(s.showing_date, s.showing_time)) showings 
FROM film f, showing s 
WHERE f.film_id = s.film_id 
GROUP BY s.film_id 
+0

这是仅针对MySQL(但没关系,问题是针对PHP web应用程序) – Aprillion 2012-04-02 16:52:04

+0

问题显然仅限于MySQL - 即使查询中存在GROUP BY子句,OP的SELECT子句也包含未聚合的未分组字段。 – 2012-04-02 16:56:30

+0

我看到了,我重申了这个问题'mysql' – Aprillion 2012-04-02 17:01:19

0

你不能做你所要求做的事情。 结果集中的每一行只能显示一个电影名称和一个放映时间。如果电影A显示5次,则可以获得五行的结果集,全部列出电影A和不同的放映时间,或者如果您通过电影A进行分组,则只会得到一个结果,并且会列出先显示时间。

0

根据您告诉我们的内容,我相信您正在寻找的是将每部电影压缩成一行的方法,该行仍然会正确列出显示的日期和时间。为了做到这一点,您需要以某种方式将这些行以不常用的方式折叠成一行。 Normall你会在这些行上使用某种函数(SUM,COUNT等)来给出汇总数据。但是,这听起来像你想看到实际的数据。

要做到这一点,有一个非常有用的,这样的问题在这里: Concatenate many rows into a single text string?

第二收视率最高的有关使用XML路径响应谈判,这很可能是做这件事的最干净的方式,如果你的数据库支持特征。如果没有,看看接受的答案(COALESCE)。我建议将这种类型的代码放入一个标量函数中,该函数使用逗号分隔的放映时间为您返回一个字段。然后,你可以列出一部电影,并在电影旁边放映时间表。

0

对不起,可能会造成混淆,也可能浪费时间,我想我已经找到了解决方案,将显示时间拆分为单独的表格。

我发现所有电影都在某个日期显示,然后循环播放并根据第一个查询返回的显示ID选择这些电影的所有放映时间,因为只会显示电影每天。我将这些信息添加到每个循环的第一个结果中,并将整个数据传回。

可能有更好的方法来做到这一点,但现在这样做。 谢谢