0

我希望我的标题能说明我正在尝试做的事情,我会尝试更好地描述它:我有一个包含两个表的数据库,一个名为“movies”,另一个名为“directors”。它是一个小型电影数据库,我们应该能够在其中显示所有电影、它们的名称、年份和制片人。

在“directors”表中,我有一个字段“id”,在“movies”表中,我有一个名为“producer”的字段,其中包含匹配的 id。我希望while循环遍历“电影”表中的所有电影(工作正常),如果我选择从“电影”打印“id”,它是正确的。但现在我希望循环显示“电影”表中的“标题”和“年份”,然后转到“导演”表并获取匹配“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

假设查询按预期工作,这应该是一个完整的解决方案

 <?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 回答
0

您正在以如下方式访问生产者信息:

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

但是,$i是来自主 SQL 循环的索引;所以在第二次运行时,您将从生产者结果集的第二行中寻找姓氏,不一定存在。所以只有第一个制作人出现了。

您可能想要查看的其他一些东西 - 您可以使用PDOmysqli访问数据 - 它们比 正在mysql被弃用的过程中更安全。您目前也在使用 mysql_fetch_assoc,但您似乎没有将结果数组用于任何事情。通过类似以下内容的结果集更为常见:

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

它将下一行加载到一个关联数组中供您使用,并在您用完行时停止。

另外,您是否考虑过如果一部电影有多个制片人,您的代码应该做什么?您可能还想为该查询添加一个循环。

于 2013-05-10T17:13:19.150 回答