【问题标题】:Foreach looping too many timesForeach 循环太多次
【发布时间】:2015-05-07 00:12:33
【问题描述】:

我正在使用它来显示来自 Wordpress 中查询数据库的信息。它显示了正确的信息,但它循环了太多次。它被设置为从 SELECT 查询中显示,并且取决于数据库的最后一个条目,它似乎是打印每个条目的两倍或三倍。

foreach ($result as $row) {
echo '<h5><i>'.$row->company.'</i> can perform your window installation for <i>$'.$row->cost.'</i><br>';
echo 'This price includes using<i> '.$row->material.'</i> as your material(s)<br>';
echo '<hr></h5>';
}

有谁知道是什么导致了这个错误? 谢谢

支持该脚本的查询是:

$result = $wpdb->get_results( "SELECT bp.*, b.company 
FROM `windows_brands_products` bp 
LEFT JOIN `windows_brands` b 
ON bp.brand_id = b.id 
JOIN Windows_last_submissions ls
JOIN windows_materials wm
JOIN Windows_submissions ws 
WHERE ws.username = '$current_user->user_login'
AND bp.width = ROUND(ls.width) 
AND bp.height = ROUND(ls.height) 
AND bp.material IN (wm.name) 
AND bp.type = ls.type 
AND IF (ls.minimumbid != '0.00',bp.cost BETWEEN ls.minimumbid AND ls.maximumbid,bp.cost <= ls.maximumbid)
ORDER BY b.company ASC");

我似乎看不到副本,但我同意它一定在那里。 编辑——当我将 WHERE 子句替换为 WHERE ws.username = 'password' 时,它仍然重复。每次结果具有 username='password' 时,它都会显示一个结果,并显示该设置两次。

【问题讨论】:

  • 您能向我们展示您的查询和数据库架构的相关部分吗?我的猜测是,您的查询中可能有一些重复的行,可能来自连接。 foreach 不是这里的问题,我可以保证。
  • 太模糊了,需要更多信息。也不要认为您可以在结果对象上使用foreach()。会为您的$result 查看fetch_assoc() 之类的函数,例如:while($row = $result-&gt;fetch_assoc()){ }
  • @Twisty - $result 可能只是一个对象数组,它完全有效并且可以像任何其他数组一样迭代 - 此外,实现 Iterable 的对象可以使用 foreach() 进行迭代,Generators 也可以
  • edit您的问题包括触发双重或三重条目的数据库条目示例(或单个,如果有的话)。感谢您提高问题的参考价值并使其更易于回答!
  • @MarkBaker 如果 OP 没有提到执行 SELECT,我会同意。这表明一个 db 结果对象,而不是一个对象数组。 Plus OP 没有定义他使用的 SQL 函数。我不是在争论你的观点,我同意,但我是根据帖子和标签的上下文提出建议。

标签: php wordpress loops foreach


【解决方案1】:

如果您使用的是 MySQLi,我认为您需要以下内容:

while ($row = $result->fetch_object()) {
     echo '<h5><i>'.$row->company.'</i> can perform your window installation for <i>$'.$row->cost.'</i><br>';
     echo 'This price includes using<i> '.$row->material.'</i> as your material(s)<br>';
     echo '<hr></h5>';
}

【讨论】:

    【解决方案2】:

    我的查询中的冗余 JOIN 子句几乎从两个表中提取相同的结果(其中一个只是另一个的 VIEW)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多