2016-08-01 11 views
0

私はサイドプロジェクトに取り組んでおり、ここ数日で素晴らしい進歩を遂げましたが、問題にぶつかりました。私はPHP、mysql、およびブートストラップで作業しています。サイドプロジェクトは映画コレクションを扱っています。私はどのようにしたいのかを示す情報の大部分を得ましたが、ジャンルはありません。私はmysql側でgroupconcatを使ってすべてのジャンルを表示することができますが、ユーザーがそれらをクリックして、そのジャンルのすべての映画を含むページを表示できるように、それらをリンクにしたいと思います。私がgroupconcatを使わないと、私はちょうど1つのジャンルを表示します。PHPで情報を表示するのにヘルプが必要

テーブルがデータベースにどのように設定されているかを示します。

映画には、プロット、期間、種類、カテゴリなどのすべての基本情報が含まれています。主キーはコード列です。 ジャンルは、すべてのジャンル情報を保持する別のテーブルです。また、コードpkを持っています。 次に、両方をリンクするMovieGenresテーブルがあります。

ムービー |コード| PK |

ジャンル |コード| PK | |ジャンル| |完全なジャンル名

MovieGenres | MovieCode | PK | | GenreCode | PK |

ご協力いただければ幸いです!あなたのSQLはすべてを選択しかし

Movies { Code(PK), ... } 
Genres { Code(PK), Genre, Full_Genre_Name } 
MovieGenres { MovieCode, GenreCode } 

、それは同じ映画の複数行のデータが含まれています。ここでは

は、サイトの一部のための私のコードは

<?php 
    require '../database.php'; 
    $Code = null; 
    if (!empty($_GET['Code'])) { 
     $Code = $_REQUEST['Code']; 
    } 

    if (null==$Code) { 
     header("Location: index.php"); 
    } else { 
     $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = " 
      SELECT 
      Movies.Code, Title, Plot, Movies.Type, 
      Movies.Category, Image, Score, Rated, Alt, Status, 
      YearReleased, Duration, 
      SUBSTRING(Duration, 1, CHAR_LENGTH(Duration) - 3) AS Duration2, 
      TotalEps, Types.code as tcode, Types.Type as ttype,  
      Categories.Code as ccode, Categories.Category as ca, 
      Ratings.Code as rc, Ratings.Rating as rr, Genre 
      FROM Movies, Types, Categories, Ratings, MovieGenres, Genres 
      WHERE Movies.Type=Types.Code 
      AND Movies.Rated=Ratings.Code 
      AND Movies.Category=Categories.Code 
      AND Movies.Code=MovieGenres.MovieCode 
      AND MovieGenres.GenreCode=Genres.Code 
      AND Movies.Code = ?"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($Code)); 
     $data = $q->fetch(PDO::FETCH_ASSOC); 
     Database::disconnect(); 
    } 
?> 

<!DOCTYPE html> 
<html lang="en"> 

<head> 

    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta name="apple-mobile-web-app-capable" content="yes"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 

    <title>MovieDB - <?php echo $data['Title'];?></title> 

    <!-- Bootstrap Core CSS --> 
    <link href="../css/bootstrap.min.css" rel="stylesheet"> 

    <!-- Custom CSS --> 
    <link href="../css/modern-business.css" rel="stylesheet"> 
    <link href="../css/custom.css" rel="stylesheet"> 
    <!-- Custom Fonts --> 
    <link href="../font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> 

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 
    <!--[if lt IE 9]> 
     <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 
     <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> 
    <![endif]--> 

</head> 

<body> 

    <!-- Navigation --> 
    <?php include '../include/nav.php';?> 

    <!-- Page Content --> 
    <div class="container"> 

     <!-- Page Heading/Breadcrumbs --> 
     <div class="row"> 
      <div class="col-lg-12"> 
       <h2 class="page-header"><?php echo $data['Title'];?> 
       </h2> 
      </div> 
     </div> 
     <!-- /.row --> 

     <!-- Portfolio Item Row --> 
     <div class="row"> 
      <div class="col-md-4"> 
       <img class="img-responsive" src="../Images/<?php echo $data['Image'];?>" alt=""> 
      </div> 


<div class="col-md-8 hidden-sm hidden-xs"> 
    <ul class="nav nav-tabs"> 
     <li class="active"><a data-toggle="tab" href="#Plot">Plot</a></li> 
     <li><a data-toggle="tab" href="#Details">Details</a></li> 
    </ul> 
    <div class="tab-content"> 
     <div id="Plot" class="tab-pane fade in active"> 
      <p><?php echo $data['Plot'];?></p> 
     </div> 
     <div id="Details" class="tab-pane fade"> 
      <li>Alternative Title: <?php echo $data['Alt'];?></li> 
      <li>Type: <a href="../list/type.php?Code=<?php echo $data['tcode'];?>&Type=<?php echo $data['ttype'];?>"><?php echo $data['ttype'];?></a></li> 
      <li>Rated: <a href="../list/rating.php?Code=<?php echo $data['rc'];?>&Rating=<?php echo $data['rr'];?>"><?php echo $data['rr'];?></a></li> 
      <li>Episodes: <?php echo $data['TotalEps'];?></li> 
      <li>Duration: <?php echo $data['Duration2'];?></li> 
      <li>Status: <?php echo $data['Status'];?></li> 
      <li>Genre: <?php echo $data['Genre'];?></li> 
      <li>Category: <a href="../list/categories.php?Code=<?php echo $data['ccode'];?>&Category=<?php echo $data['ca'];?>"><?php echo $data['ca'];?></a></li> 
      <li>Year Released: <a href="../list/year.php?Year=<?php echo $data['YearReleased'];?>"><?php echo $data['YearReleased'];?></a></li> 
      <li>Score: <?php echo $data['Score'];?></li> 
     </div> 
    </div> 
</div> 

<div class="col-md-4 hidden-md hidden=-lg"> 
    <h3>Plot</h3> 
    <p><?php echo $data['Plot'];?></p> 
</div> 
<div class="col-md-4 hidden-md hidden=-lg "> 
    <h3>Details</h3> 
    <ul> 
      <li>Alternative Title: <?php echo $data['Alt'];?></li> 
      <li>Type: <a href="../list/type.php?Code=<?php echo $data['tcode'];?>&Type=<?php echo $data['ttype'];?>"><?php echo $data['ttype'];?></a></li> 
      <li>Rated: <a href="../list/rating.php?Code=<?php echo $data['rc'];?>&Rating=<?php echo $data['rr'];?>"><?php echo $data['rr'];?></a></li> 
      <li>Episodes: <?php echo $data['TotalEps'];?></li> 
      <li>Duration: <?php echo $data['Duration'];?></li> 
      <li>Genre: <?php echo $data['Genre'];?></li> 
      <li>Status: <?php echo $data['Status'];?></li> 
      <li>Category: <a href="../list/categories.php?Code=<?php echo $data['ccode'];?>&Category=<?php echo $data['ca'];?>"><?php echo $data['ca'];?></a></li> 
      <li>Year Released: <a href="../list/year.php?Year=<?php echo $data['YearReleased'];?>"><?php echo $data['YearReleased'];?></a></li> 
      <li>Score: <?php echo $data['Score'];?></li> 
    </ul> 
    </div> 
</div> 

     <!-- /.row --> 



     <hr> 

     <!-- Footer --> 
    <?php include '../include/footer.php';?> 

    <!-- /.container --> 

    <!-- jQuery --> 
    <script src="../js/jquery.js"></script> 

    <!-- Bootstrap Core JavaScript --> 
    <script src="../js/bootstrap.min.js"></script> 
</body> 

</html> 

答えて

0

であるあなたのDBの設計は何の問題も見えません。あなただけの再かもしれない、

1) SELECT * FROM Movies WHERE Code = ? 

2) SELECT g.* 
FROM Geners AS g 
JOIN MovieGenres AS mg ON g.Code = mg.GenreCode 
WHERE mg.MovieCode = ? 

はすでにあなたのページのジャンルのためのオプションを選択している場合は、あなたの実際のページの状況によって異なります。あなたは、映画を選択するために、1つのSQLを必要とするかもしれないし、別のSQLは、すべてのジャンルを取得しますそれを使用して2)SQLの変更先:

SELECT GenreCode from MovieGenres WHERE MovieCode = ? 

<?php 
// change to your db functions 
$movieGenres = $db->getAll($sql2); 
// show clickable genres links: eg 
echo '<h3>Genres:</h3><p>'; 
foreach ($movieGenres as $g) { 
    echo '<a href="/genre/', $g['Code'] ,'">', $g['Genre_Full_Name'] ,'</a>; '; 
} 
echo '</p>'; 
?> 
+0

お返事ありがとうございます。私はそれについて考えましたが、それをPHPで実装する方法を知らなかった –

+0

今、私はあるタブセクションのプロットと別のセクションの詳細を持っており、詳細セクションにジャンルを入れたいと思います。 –

+0

元の質問に対するこの回答が正しい場合は、それを受け入れて、さらに問題がある場合は新しい質問を投稿してください – e4c5

関連する問題