2

テーブル付きのmoviesdbがあります

  1. 映画テーブル;
  2. データ表
  3. 人物表
  4. 文字テーブル
  5. モード表

映画の表

===============================================
CODE : TITLE :        DESCRIPTION       YEAR
=====================================================
1      IRON MAN 3       xxxxx          2013
2      STAR WARS        xxxxx          2013

人物表

===============================================
CODE : NAME:                 BIRTH_DATE
=====================================================
1      SHANE BLACK         1965:04:04 00:00:00
2      ROBERT DOWNEY       1965:04:04 00:00:00
3      Gwyneth Paltrow     1965:04:04 00:00:00
4      Don Cheadle         1965:04:04 00:00:00

キャラクター表

===============================================
PERSON  : NAME:             MOVIE
=====================================================
2      TONY STARK          1
3      PEPPER POTTS        1
4      Col. James Rhodes   1

モード表

===============================================
CODE : NAME : 
=====================================================
1      DIRECTOR 
2      WRITER
3      ACTOR
4      CHARACTER

データ表

===============================================
CODE : MOVIE :     PERSON   MODE
=====================================================
1      1             1       1
2      1             2       3 
3      1             3       3 
4      1             4       3 

最終的な答えは次のようになります:

===============================================
CODE : MOVIE TITLE :  DIRECTOR  :     ACTORS           CHARACTERS
=====================================================
1      IRON MAN 3     SHANE BLACK   Robert Downey Jr.   Tony Stark
                                    Gwyneth Paltrow     Pepper Potts
                                    Don Cheadle         Col. James 

MySQL コマンドは次のとおりです。

SELECT 
  movies.title,
  movies.year,
  persons.name,
  modes.name,
  persons.birth_date,
  characters.name
FROM
  data
  INNER JOIN movies ON (data.movie = movies.code)
  INNER JOIN persons ON (data.person = persons.code)
  INNER JOIN modes ON (data.mode = modes.code)
  INNER JOIN characters ON (persons.code = characters.person)
  AND (characters.movie = data.movie)
WHERE
  MOVIES.code = '1'

SQL コマンドは問題なく動作します。

PHPコードに問題があります

$movie_query = mysql_query("
SELECT 
  movies.title,
  movies.year,
  persons.name,
  modes.name,
  persons.birth_date,
  characters.name
FROM
  data
  INNER JOIN movies ON (data.movie = movies.code)
  INNER JOIN persons ON (data.person = persons.code)
  INNER JOIN modes ON (data.mode = modes.code)
  INNER JOIN characters ON (persons.code = characters.person)
  AND (characters.movie = data.movie)
WHERE
  MOVIES.code = '1';");

WHILE ($rows = mysql_fetch_array($movie_query ))
{ 
    $movie_code = $rows['movies'.'code'];
    $movies_title = $rows['movies'.'title'];
    $movies_year = $rows['movies'.'year'];
    $movies_date_add = $rows['movies'.'date_add'];
    $movies_tagline = $rows['movies'.'tagline'];

    echo "$movie_code<br>$movies_title<br>$movies_year<br>$movies_date_add<br>$movies_tagline<br>";
}

私のPHPコードに問題はありますか..?(SQLコマンドはMySQL構文と同じではないようです)

4

1 に答える 1

3

1 mysql を使用する代わりに PDO を使用する必要があります。その説明については、上記の christian-giupponi のコメントを参照してください。

2 「;」があります 削除する必要があるSQLステートメントで

2 クエリの結果にテーブル名が含まれていません

3 選択しない限り、テーブル内のデータにアクセスできないため、SQL で movies.code を要求しない限り、$row['code'] は機能しません。

4 同じ名前のフィールドを選択している場合は、それらを再割り当てする必要があります。そうしないと、何か問題が発生します

$movie_query = mysql_query("
SELECT 
    movies.code,
    movies.title,
    movies.year,
    persons.name as pname,
    modes.name as mname,
    persons.birth_date,
    characters.name as cname
FROM
    data
    INNER JOIN movies ON (data.movie = movies.code)
    INNER JOIN persons ON (data.person = persons.code)
    INNER JOIN modes ON (data.mode = modes.code)
    INNER JOIN characters ON (persons.code = characters.person)
    AND (characters.movie = data.movie)
WHERE 
    MOVIES.code = '1'
");

WHILE ($rows = mysql_fetch_array($movie_query ))
{ 
    $movie_code = $rows['code'];
    $movies_title = $rows['title'];
    $movies_year = $rows['year'];
    $movies_date_add = $rows['date_add'];
    $movies_tagline = $rows['tagline'];

    echo "$movie_code<br>$movies_title<br>$movies_year<br>$movies_date_add<br>$movies_tagline<br>";
}

頑張ってください。今 PDO を使用しないと、後で苦しむことになることを忘れないでください。

于 2013-07-28T10:38:58.827 に答える