好的,所以现在我在另一个查询的while循环里面有一个查询......但是有一个更有效的方法来做我想做的事情。我可以通过一个查询完成下面的脚本吗?那会更有效率吗? (我假定这将是)这就是我现在(不是真正的代码,而是一个很好的例子):PHP - 用联接替换子查询?
$sth = $dbh->prepare("SELECT * FROM Bugs LIMIT 5");
$sth->setFetchMode(PDO::FETCH_OBJ);
$sth->execute();
while($row = $sth->fetch()){
$bugId = $row->id;
echo 'Bug Name: ' . $row->name;
echo '<br />';
echo 'Affected Web Browsers: ';
$sth2 = $dbh->prepare("SELECT * FROM AffectedBrowsers WHERE BugId = '$bugId'");
$sth2->setFetchMode(PDO::FETCH_OBJ);
$sth2->execute();
$i = 1;
while($row2 = $sth2->fetch()){
if($i = 1){
echo $row2->browser;
}else{
echo ', ' . $row2->browser;
}
$i++;
}
}
我的表如下所示: 1)“错误” - 这个表有一个列出每个错误的行。 2)“AFfectedBrowsers” - 这个表格包含了所有受影响的浏览器的特定错误。此表通过“AffectedBrowsers”表中的bugId列与“Bugs”表关联。
注意:我意识到增加$ i可以在for循环中完成,而不是在if/else中完成。
更新:我只需要每行一行,并且我猜测在结果集中添加了一列,列出了所有受影响的浏览器。
'极限5'是否必要?或者,无论“错误”的数量是多少,限制“受影响浏览器”总数的数量是否可以? – 2012-08-03 14:34:10
限制5是因为我只想在正在实现的特定页面上显示5个错误。但我无法限制受影响的浏览器总数,因为我需要现在每个浏览器都会有一个错误影响。 – ryanpitts1 2012-08-03 14:35:33
请参阅David Hirst的答案。 “LIMIT 5”限制了总体结果,而不是bug。相反,如果你需要限制错误,这会使事情变得复杂。 – 2012-08-03 14:37:03