这与earlier question I posted有关,但不幸的是我认为我没有清楚地说明我的问题,因为我没有得到我问题的完整答案。
我有两个表,一个叫做Groups,另一个叫做Items。我想要做的是选择所有组,然后在每个组中选择所有项目,所以我最终得到这样的结果:
标题1 < - 组
标题2 < - 组
在我的原始帖子中,您可以看到我以前用来实现此目的的代码,这实际上是循环中的循环,首先选择所有组,然后选择组中的所有项目。我知道在SQL查询循环中有一个SQL查询循环是个坏主意,所以感谢一些有用的SO成员我现在有了这个代码:
$query = "SELECT g.ID AS GRPID, g.Description AS GrpDesc,i.ID AS ITEM_ID, i.Description AS ItemDescription
FROM Groups_Inv g
LEFT JOIN Items_Inv i
ON g.ID=i.grpID
ORDER BY g.SortNum ASC";
try {
$result = odbc_exec($connect,$query);
if($result){
while ($groups = odbc_fetch_array($result)) {
echo "<li title='".$groups['GrpDesc']."' class='category'>
<h3><span><a class='category'>".$groups['GrpDesc']."</a></span></h3>
<ul class='sub-menu'>\n";
echo "<li class='select'>
<input type='radio' class='addRow'>
<label for='".$groups['ITEM_ID']."'>
".$groups['ItemDescription']."
</label>
</li>\n";
echo "</ul>
</li>\n";
}
}
else {
throw new RuntimeException("Failed to connect.");
}
}
这会选择所有具有相应项目的组,但不会对其组标题下的所有项目进行分组,因此我最终会得到如下结果:
标题1
标题1
如何修改此项以便所有组仅列出一次,并且每个组的所有项目都正确列在组标题下?
答案 0 :(得分:1)
如果您在此代码中遇到问题,请告诉我。我使用单独的类进行查询。
class tank extends mysqli{
public function curr_group_content($a)
{
$query ="SELECT g.ID AS GRPID, g.Description AS GrpDesc,i.ID AS ITEM_ID, i.Description AS ItemDescription
FROM Groups_Inv g
LEFT JOIN Items_Inv i
ON g.ID=i.grpID
ORDER BY g.SortNum ASC";
if ($stmt = parent::prepare($query)){
$stmt->execute();
$meta = $stmt->result_metadata();
while ( $field = $meta->fetch_field() ) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ( $stmt->fetch() ) {
$x = array();
foreach( $row as $key => $val ) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
$stmt->close();
}//END PREPARE
else{trigger_error($this->error, E_USER_NOTICE);}
}
}
$clients = new tank();
$data = array();
$events = $clients->curr_group_content();
$eventscount = sizeof($events);
for($i=0;$i<$eventscount;$i++){
$data['item'][] = $events[$i]['item'];
}