0

私のタイトルが私がやろうとしていることについて何かを表していることを願っています.もう少しうまく説明しようと思います.1つは「movies」、もう1つは「directors」という名前の2つのテーブルを持つデータベースがあります. すべての映画、タイトル、年、プロデューサーを表示できる小さな映画データベースです。

「ディレクター」テーブルには「id」フィールドがあり、「映画」テーブルには、一致する ID を持つ「プロデューサー」という名前のフィールドがあります。「movies」テーブル内のすべてのムービーを while ループでループさせたい (正常に動作している)。「movies」から「id」を出力することを選択した場合は、正しい。しかし今、ループで「movies」テーブルから「title」と「year」を表示し、「directors」テーブルに移動して、一致する「id」の名前を取得したいと考えています。

私は PHP クエリと mysql クエリの両方に不慣れで、私のコードは最初の映画でこれを正しく実行しますが、残りの「プロデューサー」フィールドは今のところ空です。(現在、姓を表示して、それが機能することを確認しようとしています)。

参考までに、これは学校のプロジェクト用です。

コード:

 <?php
 $sql = "SELECT * FROM movies ORDER BY title ASC";
 $result = mysql_query($sql);
 $row = mysql_fetch_assoc($result);
 $id = $row['id'];


 $num=mysql_numrows($result);

 $i=0;

 while ($i < $num) {

 $title=mysql_result($result,$i,"title");
 $year=mysql_result($result,$i,"year");
 $producer=mysql_result($result,$i,"producer");
 $id=mysql_result($result,$i,"id");


 $sqldir = "SELECT * FROM directors WHERE id='$producer'";
 $result1 = mysql_query($sqldir);
 $row1 = mysql_fetch_assoc($result1);
 $iddir = $row['id'];
 $producertext = mysql_result($result1,$i,"surname");
 ?>





 <b>Title:</b> <?php echo $title ?>
 <br/><b>Year:</b> <?php echo $year ?>
 <br/><b>Director:</b> <?php echo $producertext ?>
 <br/>    

    </form> <HR>
    <?php
    $i++;

}   
?>
4

4 に答える 4

1

すべての映画に単一の監督がいると仮定すると、結合されたクエリを作成できます

SELECT movies.title as title, movies.year as `year` producer.surname as surname  
FROM movies, producer where movies.producter = producer.id ORDER BY title ASC

その後、結果セットをウォークするだけで、姓が結果配列に含まれます。

于 2013-05-10T17:15:49.950 に答える
0

次のようにプロデューサー情報にアクセスしています。

$producertext = mysql_result($result1,$i,"surname");

ただし、$iメインの SQL ループからのインデックスです。したがって、2 回目の実行では、プロデューサーの結果セットの 2 行目から姓を探すことになりますが、必ずしもそこにあるとは限りません。したがって、最初のプロデューサーのみが表示されます。

あなたが見たいと思うかもしれない他のいくつかのこと - あなたはデータを使用しPDOたりアクセスしたりできます - それらは非推奨になる過程にあるmysqliより安全です。mysql現時点では mysql_fetch_assoc も使用していますが、結果の配列を何にも使用していないようです。次のような結果セットを通過する方がはるかに一般的です。

while ($row = myssql_fetch_assoc($result)) {
    ....
}

次の行を連想配列にロードして使用し、行がなくなると停止します。

また、1 つの映画に複数のプロデューサーがいる場合に、コードが何をすべきかを考えたことはありますか? そのクエリにもループを追加することをお勧めします。

于 2013-05-10T17:13:19.150 に答える
0

クエリが期待どおりに機能すると仮定した場合、ここに完全な解決策があるはずです

 <?php
 $sql = "SELECT movies.title as title, movies.year as `year` producer.surname as surname FROM movies, producer where movies.producter = producer.id ORDER BY title ASC";
 $result = mysql_query($sql);
 while ($row = mysql_fetch_assoc($result)): ?>
    <b>Title:</b> <?php echo $row['title'] ?>
    <br/><b>Year:</b> <?php echo $row['year'] ?>
    <br/><b>Director:</b> <?php echo $row['surname]; ?>
 <?php
 endwhile;
 ?>
于 2013-05-10T18:34:26.503 に答える
0

間違った機能を使用しています

$num=mysql_numrows($result);

あなたが使用する必要があります

$num=mysql_num_rows($result);
于 2013-05-10T16:53:03.020 に答える