将两个SQL查询组合到一个数组中?
这是将两个SQL查询合并到数组的正确方法吗?将两个SQL查询组合到一个数组中?
注:我知道SQL JOIN,但我需要使用两个查询。
见下文:现在
$query = "SELECT * FROM categories WHERE takeawayID = :TakeawayID";
$statement = $this->db->prepare($query);
$statement->bindValue(':TakeawayID', $takeawayID, PDO::PARAM_STR);
$statement->execute();
$data['rowCats'] = $statement->fetchall(PDO::FETCH_CLASS);
$categories = array();
foreach ($data['rowCats'] as $cat) {
$temp_categories = array();
$temp_categories['id'] = $cat->id;
$temp_categories['name'] = $cat->name;
$num = $cat->id;
$query = "SELECT * FROM items WHERE category_id = :category_id";
$statement = $this->db->prepare($query);
$statement->bindValue(':category_id', $num, PDO::PARAM_STR);
$statement->execute();
$data['rowItem'] = $statement->fetchall(PDO::FETCH_CLASS);
foreach ($data['rowItem'] as $Item) {
$temp_categories['item']['name'][] = $Item->name;
}
$categories[] = $temp_categories;
}
$类别阵列可以被传递到视图文件(模板)
在视图文件我应该可以做这样的事情:
<?php foreach($categories as $category): ?>
<table border=0 Cellspacing='0'>
<tr>
<td>
<?php echo $category['name']; ?>
</td>
</tr>
<?php foreach ($category['items'] as $item): ?>
<tr>
<td>
<?php echo $item['name']; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php endforeach; ?>
你有什么理由将结果作为类而不是关联数组获取?将FETCH_CLASS
更改为FETCH_ASSOC
可让您直接将项目名称添加到第一个查询的结果中,而无需使用临时数组。
在该foreach循环中,语义上只有一个具有多个名称的项目。我认为这不是你想要做的,所以你应该写这样的东西:
foreach ($data['rowItem'] as $Item) {
$temp_categories['item'][] = array('name' => $Item->name);
}
谢谢!这解决了这个问题。有没有替代方法比数组('名称'=> $项目 - >名称); ? – user622378 2011-04-05 17:30:45
@ user622378:是的,你可以使用'$ arr = array(); $ arr ['name'] = $ Item-> name; $ temp_categories ['item'] [] = $ arr;'但我的答案中的版本只是它的简写。 – Kaivosukeltaja 2011-04-05 17:33:46
什么样的问题?它输出什么?你有错误信息吗? – Kaivosukeltaja 2011-04-05 16:59:40