【发布时间】: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->fetch_assoc()){ } -
@Twisty - $result 可能只是一个对象数组,它完全有效并且可以像任何其他数组一样迭代 - 此外,实现
Iterable的对象可以使用foreach()进行迭代,Generators也可以 -
请edit您的问题包括触发双重或三重条目的数据库条目示例(或单个,如果有的话)。感谢您提高问题的参考价值并使其更易于回答!
-
@MarkBaker 如果 OP 没有提到执行
SELECT,我会同意。这表明一个 db 结果对象,而不是一个对象数组。 Plus OP 没有定义他使用的 SQL 函数。我不是在争论你的观点,我同意,但我是根据帖子和标签的上下文提出建议。
标签: php wordpress loops foreach