2012-04-02 9 views
0
私は小さな映画館の予約システムPHPのWebアプリケーションを構築しています

は参加&グループ化SQLは

データベースはテーブルを表示フィルムを持っている結果。

を表示(他の人が、重要でない間)は1枚のフィルムで構成されて表示、日付と時刻、および各を持って

フィルムは、多くの上映

を持つことができます

私はすべてのfilm_name、showing_date、およびshowing_timeを取得するクエリを作成しようとしていますが、結果に複数のフィルムを持たないようにグループ化したいので、より多くのことができます同じ日付に1つ表示されます。

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 

は、しかし、それは各フィルム、ちょうど最初の1のためのすべての回を示すないです:

私はこのSQLを持っています。私は欠けていることがたくさんあると思うし、別のテーブルに表示時間を分割する必要があるかもしれませんが、どんな助けも大歓迎です。私は、必要に応じてもっと多くの情報と図を用意します。

おかげであなたが同じ行のすべての上映を持つフィルムごとに1行を、したいと仮定すると、

+5

あなたは結果に複数の映画を望んでいないと言っていますが、映画ごとに1つのショータイムを表示したくないという人もいます。これらの2つは矛盾しています。あなたは戻ってきたい結果は何ですか? –

+0

@ user1308430私たちが助けることができるように、いくつかのデータと望ましい出力をあなたのテーブルに入れれば、あなたの質問は明確な意味を持っていません... –

答えて

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

+0

クエリーにGROUP BY句があっても、OPのSELECT句に集約されていないグループ化されていないフィールドが含まれています。 –

+0

私はmysqlへの質問にタグを付けました – Aprillion

0

あなたはあなたがする求めているものを行うことはできません。 結果セットの各行には、1つのフィルム名と1つの番組時間しか表示されません。フィルムAが5回表示されている場合は、5行の結果セット、すべてのフィルムAと異なるショータイムを取得するか、またはフィルムAでグループ化すると1つの結果しか得られません。最初のショータイム。

0

私が言ったことに基づいて、あなたが探しているものは、それぞれのフィルムを1列に凝縮させて、日時を正しく表示する方法であると信じています。これを行うには、しばしば使用されない方法でこれらの行を何とか1つの行に崩壊させる必要があります。通常、これらの行(SUM、COUNTなど)で何らかの関数を使用して集計データを与えます。しかし、実際のデータを見たいと思うように聞こえます。これを行うには

、本当に便利ではSO、ここで質問があります: Concatenate many rows into a single text string?

データベースがあることをサポートしている場合、おそらくそれを行うためのクリーンな方法だろうXMLパスを使用しておよそ2番目に高い定格応答会談、特徴。そうでない場合は、受け入れられた答え(COALESCE)を見てください。私はこのタイプのコードをカンマで区切った1つのフィールドを返すスカラー関数に入れることをお勧めします。次に、映画をリストし、その映画の隣に上映時間のリストを表示することができます。

0

ご迷惑をおかけして時間を無駄にしてしまったことをお詫び申し上げます。表示時間を別のテーブルに分割して解決策を見つけました。

特定の日付にすべての映画が表示されていることを確認してから、ループスルーし、最初のクエリから返された表示IDに基づいてそれらの映画のすべての表示時間を選択します。 1日あたりこの情報をループサイクルごとの最初の結果に追加し、データ全体を戻します。

おそらくもっと良い方法がありますが、これは今のところ行います。 ありがとう