PHP如何在另一个查询的循环内执行查询

时间:2014-03-15 11:08:13

标签: php string mysqli while-loop fatal-error

在主页上,我从一个表(故事)中随机显示SQL数据行,使用html列表将数据显示分隔为块,并使用while循环遍历数据。在该块中,我需要回显来自第二个表(评级)的计算数据,该数据是平均值,并且根据当前在循环中运行的变量$ id来选择在表中选择的产生平均值的行(从第一个开始)表)。因此,$ id是两个表中的一列。第一个表(故事)的循环工作正常但我添加了第二个查询

    $avgrate=mysqli_query($connection,"SELECT AVG(rank) FROM ratings WHERE storyidr=$id");
    if(is_null($avgrate)){$avgrate = "0";}

没有数据显示。

错误报告:查看源代码我可以看到表中第一个项目的数据被循环(故事)拉起(但没有显示在页面上),并且后面没有更多的表行显示。并且有一条错误消息:

捕获致命错误:类mysqli_result的对象无法转换为index.php中指向包含

的行的字符串
    <legend><?php echo $avgrate; ?></legend>

我不明白这个错误是如何适合的,以及我如何在查询不同表的循环中运行查询到另一个表。这是剧本的重要部分。任何输入都非常赞赏。

的index.html

<?php
    include("db.php");
    $query="SELECT * FROM `stories` WHERE id
        BETWEEN 1 AND 200 order by RAND() LIMIT 10";
    $result=mysqli_query($connection,$query);
?>
<?php
    while ($data = mysqli_fetch_assoc($result)):
        $id = $data['id'];
            $avgrate=mysqli_query($connection,"SELECT AVG(rank) FROM ratings WHERE storyidr=$id");
                if(is_null($avgrate)){$avgrate = "0";}
        $author = $data['author'];
        $page_path = $data['page_path'];
            if(is_null($page_path)){$page_path = "#";}
?>

<li><a href="create_page.php?id=<?php echo $id; ?>"> 
    <div class="block">
        <p>Author<?php echo $author; ?></p>
            <form action="rating.php?id=<?php echo $id; ?>">
                <legend><?php echo $avgrate; ?></legend>
            </form>
    </div>
</li>
<?php
    endwhile;
    mysqli_close($connection);
?>

1 个答案:

答案 0 :(得分:1)

问题是您没有从第二个查询中获取行。它应该是:

$rank_result=mysqli_query($connection,"SELECT AVG(rank) AS avrank FROM ratings WHERE storyidr=$id");
$rate_row = mysql_fetch_assoc($rank_result);
$avgrate = $rate_row ? $rate_row['avrank'] : '0';

但是您不需要将这些作为单独的查询来执行,您可以在带有联接的单个查询中执行这些操作:

SELECT s.*, AVG(r.rank) AS avrank
FROM (SELECT *
      FROM stories
      WHERE s.id BETWEEN 1 AND 100
      ORDER BY RAND()
      LIMIT 10) AS s
LEFT JOIN ratings AS r ON r.storyidr = s.id