我有一个这样的MySQL查询:
SELECT c.id
, c.company_name
, b.brand_id
, b.brand_name
FROM companies as c
JOIN brands AS b
ON c.id = b.company_id;
返回如下表:
结果存储在
$items
中我希望能够使用
foreach
循环来显示如下结果:<ul>
<li><b>adidas plc</b></li>
<li>adidas</li>
</ul>
<ul>
<li><b>coca-cola</b></li>
<li>coke</li>
<li>dr pepper</li>
<li>7up</li>
</ul>
<ul>
<li><b>ebay</b></li>
<li>Duobam</li>
</ul>
仅使用上面的联接查询如何完成此操作?我可以通过以下方法来做到这一点:首先查询company表,然后对brand表中的每个表执行一个新查询,但是每个表都有成千上万的公司和多个品牌,这将导致过多的查询。
foreach($items as $item){
echo '
<ul>
<li><b>'.$item['company_name'].'</b></li>
<li>'.$item['brand_name'].'</li>
</ul>
';
}
最佳答案
这是做这种事情的一种方式:
<?php
$brands = Array (
Array ( 'company_name' => 'adidas',
'brand_name' => 'adidas' ),
Array ( 'company_name' => 'coca-cola',
'brand_name' => 'coke' ),
Array ( 'company_name' => 'coca-cola',
'brand_name' => 'dr pepper' ),
Array ( 'company_name' => 'coca-cola',
'brand_name' => 'sprite' ),
Array ( 'company_name' => 'ebay',
'brand_name' => 'duobam' ),
);
$old_company = ""; // storage for current company_name
foreach($brands as $brand) {
if($old_company!=$brand['company_name']) { // if it changed, show it
if($old_company!='') echo "</ul>";
echo "<ul><li><b>".$brand['company_name']."</b></li>";
}
echo "<li>".$brand['brand_name']."</li>";
$old_company=$brand['company_name']; // update company_name
}
echo "</ul>"; // final ul closure
?>
表,表行等使用相同的技术...
注意,数据源必须按company_name排序/分组!
关于php - 组mysql导致嵌套数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41126899/