2011-12-21 10 views
0

私は、特定のアーカイブのムービー予約/閲覧Webサイトで作業しています。同じフォーマットと異なるフォーマット(vcd、dvd、vhs)の両方で複数のムービーがあります。データベースには2つのテーブルがあります.1つは映画のタイトル、ディレクターなどの一般的な情報用です。ディスクのような字幕、言語、ディスクの数。div(HTML、PHP、MySQL)への複数のテーブルからの情報の取得

検索結果を表示するときにdivを作成しました。検索結果として映画名のみが表示され、その近くにエキスパンドボタンがあり、ボタンをクリックすると、ページの右側に情報divが表示され、映画のすべての情報が表示されます。しかし、上記の複数の映画には問題があります。私は複数の映画のためにそれをすることができませんでした。

重複するムービーのタイトルを1つだけ表示するようにしたいのですが、展開ボタンをクリックすると、重複するすべてのコピーのすべての詳細が表示されます(ドロップダウンボックスやユーザーが選択した形式に従ってフォーマットを選択すると、情報が表示されます)

どうすればいいですか?このためのデータベース関数とPHPコードは何でしょうか?

私はアイデアやコード

の作品のすべての種類に開いていますおかげ

+0

を提供することができます私たちの頭を包み込む? – PseudoNinja

+1

ムービーが重複していると、dbスキーマの再検討が必要な場合があります。映画を分ける方がいいかもしれないので、タイトルは1つだけです。代わりに、ムービーには多対多の関係になる 'format'フィールドがあります。これにより、重複を取り除き、DB構造を正常化することができます。 – dm03514

答えて

1

短い答えは$ mysqliのか、$ mysqlは複数の行を返し、あなたがそれらを介してループする必要があるということです。

まともな初期のアプローチかもしれません。これは最適化されていないことに注意してください(1つのWHERE INリクエストですべてのディスクのすべてのディスクを取得して割り当てたいと思うかもしれませんが、これが最初です)。 :

id (PRIMARY KEY) 
title 
director 

ディスクテーブル

id (PRIMARY KEY) 
film_id 
subtitle 
language 

PHP:あなたは私たちトンのためのいくつかのサンプルコードを

class DB { 
    private static $mysqli; 
    public static function getDB() { 
     if(!isset($this->mysqli)) { 
      $this->mysqli = new mysqli('localhost','user','password','db'); 
     } 
     return $this->mysqli(); 
    } 
    public static function closeDB() { 
     $mysqli->close(); 
     unset($mysqli); 
    } 
} 
class Disk { 
    private $id; 
    private $film_id; 
    private $subtitle; 
    private $language; 
    public static function GetByFilmId($id) { 
     $id= DB::getDB()->real_escape_string($id); 
     $query = sprintf("SELECT * FROM movie where title = '%i1'",$id); 
     $result = DB::getDB()->query($query); 
     $disks = array(); 
     while ($disk = $result->fetch_object("Disk")) { 
      $disks[] = $disk; 
     } 
     $result->close(); 
     return $disks; 
    } 
    public render() { 
?> 
<div class="disk"> 
    <div><?php echo $this->subtitle; ?></div> 
</div> 
<?php 
    } 
} 
class Movie { 
    private $id; 
    private $title; 
    private $director; 
    public static function GetByTitle($title) { 
     $title = DB::getDB()->real_escape_string($title); 
     $query = sprintf("SELECT * FROM movie where title = '%s1'",$title); 
     $result = DB::getDB()->query($query); 
     $movies = array(); 
     while ($movie = $result->fetch_object("Movie")) { 
      $movies[] = $movie; 
     } 
     $result->close(); 
     return $movies; 
    } 
    public __construct() { 
     $this->getDisks(); 
    } 
    public getDisks() { 
     $disks = Disks::GetByFilmId($this->id); 
    } 
    public render() { 
?> 
<div class="movie"> 
<div><?php echo $this->title; ?></div> 
<div class="disks">  
<?php 
foreach($disks as $disk) { 
    $disk->render(); 
} 
?> 
</div> 
<?php 
    } 
} 
$movies = Movie::GetByTitle($_GET['title']); 
DB::closeDB(); 
?> 
<html> 
<head> 
    <title>MovieLand :: Movies Named <?php echo $_GET['title']; ?></title> 
</head> 
<body> 
<h1>A List of Movies</h1> 
<div class="movies"> 
<?php 
foreach($movies as $movie) { 
    $movie->render(); 
} 
?> 
</div> 
</body> 
</html> 
関連する問題