2016-04-13 10 views
0

私は、データベースからデータを取り出して特定の方法で出力するために、私のPHPフォーム上で多くの機能を構築しなければならないMySQLの音楽データベースを構築しています。サブクエリに基づいてPHPフォームを構築するにはどうすればよいですか?

このような機能の1つは、アーティストが演奏しているすべてのツアー日を一覧表示することです。私はまだページを書いていないので、これを設定するための基礎をレイアウトするのに役立つアイデアを求めています。

私がこれを動作させる方法は、ユーザーがあらかじめ設定されたアーティストリストを見て、特定のアーティストを強調表示してボタンをクリックすると、そのページが読み込まれ、対応するツアー日が表示されますそのアーティストへのリンク。

データベース内の特定のテーブルのリンク方法は次のとおりです。

ツアー表

この表はartist_idを保持し、特定のアーティストがやっているすべてのツアーを示しています。 (注:このテーブルには、ツアーはの一部である日付するツアーを、保持している)

CREATE TABLE `tbl_Tour` ( `Tour_id` int(11) NOT NULL auto_increment,   
`Tour_Name` varchar(32) NOT NULL,   
`Start_date` date NOT NULL,   
`End_date` date NOT NULL,   
`Artist_id` int(11) NOT NULL,   
PRIMARY KEY  (`Tour_id`),  KEY `Artist_id` (`Artist_id`),   
CONSTRAINT `tbl_Tour_ibfk_1` 
FOREIGN KEY (`Artist_id`) REFERENCES `tbl_Artist` (`Artist_id`)) 

表ツアー日

このテーブルには、ツアー日程を保持している、の日付は、として行われツアーの一部は、私は特定のアーティストがやっているだろうと、すべてのツアー日程を参照したい(Tourdateはツアーリンクされているので、tourdateは直接それにリンクされartist_idていません。それはツアーを介して接続されている)

CREATE TABLE `tbl_Tourdate` ( `Tourdate_id` int(11) NOT NULL auto_increment,   
`Tour_Date` date NOT NULL,   
`Country` varchar(32) NOT NULL,   
`Town` varchar(32) NOT NULL,   
`Venue` varchar(32) NOT NULL,   
`Tour_id` int(11) NOT NULL,  PRIMARY KEY  (`Tourdate_id`),   
KEY `Tour_id` (`Tour_id`),   
CONSTRAINT `tbl_Tourdate_ibfk_1` 
FOREIGN KEY (`Tour_id`) REFERENCES `tbl_Tour` (`Tour_id`)) 

私は既に設定済みですartist_idセットに基づいて特定のツアー日を取得するために機能するサブクエリです。しかし、私はこれをユーザーが対話できるphp/htmlファイルに組み込む必要があります。

SELECT td.Tour_Date 
FROM tbl_Tourdate td 
WHERE td.Tour_id=(SELECT t.Tour_id 
FROM tbl_Tour t 
WHERE t.Artist_id=2) 

しかし、私は単純に使用するためにユーザーのためにフォームを構築する必要があります。だから、アーティストの名前を列挙する手段が必要です。クリックすると、クリックしたアーティストにリンクされたツアーの日付のリストがフォーム上に生成されます。私はこのフォームを設定する点でどこから始めたらいいのか分かりません。だから私はそれを構築する方法に関するいくつかの提案やアイディアを得ることができるかどうか疑問に思っていた。

をとして、あなたが一つにすべてのデータを取得することができ、あなたは2つのテーブルを使用して、代わりにサブクエリを使用しての条件をJOINを使用したい場合は、単一のクエリを使用することができ、

+0

これについてもっと明確にしてください:ツアーリストにはどのような表示が必要ですか?私はそれが形になっていることを知っていますが、人々はそれで何かを何かできるようにしなければなりませんか? - 一度に複数のアーティストを選択できると言っているのですか?この状況では、どのようなことが起こりますか? – NoobishPro

+0

いいえ、それはアーティスト名をクリックするだけの方法であり、リンク先のツアーの日付をすべて一覧表示します。他には何も期待されていません。 –

+0

私は、あなたがそのようなクエリを書くことができるときに、あなたはそのようなタスクを実行できると思います。または、ページが最初にリフレッシュすることを許可されていないことを意味しますか?その場合、私たちはajax(javascript/jquery)を話しています。ページの更新が許可されている場合は、PHPだけでそれを行うことができます。アーティストの名前については、私は 'select'要素をお勧めします。あなたはselect2のようなものを人がそれを検索できるように置くことができます。 - すみません、私には分かりません。 – NoobishPro

答えて

0

まず事前にありがとうクエリはPHP変数に入れるのが簡単なはずです。

もちろん、これらの2つのテーブルのデータを1つにマージするだけで済みます。

サブクエリも削除されます。このような2つのテーブルを持つことは役に立たないようですが、ツアー名、日付、アーティストIDを「ツアー日」テーブルに表示できないのはなぜですか?すべてのツアー関連のデータを1つのテーブルに格納する。

次に、あなたはこのような単純なクエリ持つことができます:mysqli_connect構造物であることが必要DBDB

$tours = mysqli_query($dbdb, "SELECT Tourdate_id, Tour_Date, Country, Town, Venue FROM tbl_Tourdate WHERE artist_id = 'x'"); 
<table> 
    <thead> 
     <tr> 
      <th>Date</th> 
      <th>Country</th> 
      <th>Town</th> 
      <th>Venue</th> 
     </tr> 
    </thead> 
    <tbody><? 
     while(list($Date, $Country, $Town, $Venue) = mysqli_fetch_row($tours)){ 

      echo"<tr>"; 
       echo"<td>".$Date."</td>"; 
       echo"<td>".$Country."</td>"; 
       echo"<td>".$Town."</td>"; 
       echo"<td>".$Venue."</td>"; 
      echo"</tr>"; 
     } ?> 
    </tbody> 
</table> 

$:次に、このようにPHPのループ+ HTMLテーブルを使用し

SELECT Tourdate_id, Tour_Date, Country, Town, Venue 
FROM tbl_Tourdate 
WHERE artist_id = $id; 

を。

クエリの$ idは、入力フォームまたは別のPHPページのGETリクエストから取得できます。

とにかく、ちょっと考えました。

0

私は、フォームのレイアウトを作成することによって開始すると、非常に単純なスタートの線に沿って何かのようになります。これであなたの」lookup.phpスクリプトにアーティスト名を送信します

<form action="lookup.php" method="post"> 
    <input type="text" name="artist"> 
    <input type="submit"> 
</form> 

作業中のsqlクエリを適用すると、後でどのような方法でも印刷される配列が返されます。@ScottSmudgerの答えは、実際にクエリ結果を含むテーブルを印刷するプロセスを経由します。

あなたはさらに反復処理し、すでに満たされたアーティスト名のドロップダウンをしたいのですが、後に、その後、AJAXを経由して検索を実行しているJSON配列を返す、もちろん、始めるためVERY基本的な方法ですより洗練されたUXになります。

+0

これは外部ファイルを参照するのではなく、同じファイル内でsqlクエリを持つことはできませんでした。ちょうどPHPコードで囲まれていますか?私が思うには、PHPコードは見えません。 –

+0

@JackRogersもちろん、action属性からlookup.phpを削除するだけで、POSTリクエスト(この場合はアーティスト名)が同じページに送信されます。それから、おそらく、もしあなたがすることができます(isset($ _ POST ['artist'])){//ここでmysqlクエリを実行} – gmslzr

+0

これは何か? ($ _ POST ['artist'])){ $ SearchQuery = "SELECT td.Tour_Date FROM tbl_Tourdate td WHERE td.Tour_id = ) "; mysqli_query($ conn、$ SearchQuery); } ?> ' –

関連する問題