在主页上,我从一个表(故事)中随机显示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);
?>
答案 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