一旦我运行查询,将多个列连接在一起,我得到的结果如下:
id item category
1 item 1 A
1 item 1 B
1 item 1 C
2 item 2 A
2 item 2 D
3 item 3 B
3 item 3 E
我有一个输出每行的while循环:。
while($results = mysql_fetch_array($raw_results)) {
echo $results['item'].<br>;
echo "Category: ".$results['category'];
}
它正在给出这个:
<div>
Item 1
Category: A
</div>
<div>
Item 1
Category: B
</div>
等等,但我需要做的是将每个ID的所有值合并到一个空格中,结果如下所示:
<div>
Item 1
Category: A, B, C
</div>
<div>
Item 2
Category: A, D
</div>
<div>
Item 3
Category: B, E
</div>
最好的方法是什么?我应该为每个ID创建另一个包含行的数组,然后循环遍历(以及如何设置数组?)或者还有其他什么?
答案 0 :(得分:4)
使用GROUP BY
GROUP_CONCAT
http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/
答案 1 :(得分:1)
您可以在查询中执行此操作,而不是依赖于PHP。
Select item, group_concat(category) FROM yourtable GROUP BY Item
答案 2 :(得分:1)
答案 3 :(得分:0)
为每个项目创建一个类别数组:
while($results = mysql_fetch_array($raw_results)) {
$items[$results['item']][] = $results['category'];
}
然后使用它输出您的HTML:
foreach ($items as $itemName => $categories) {
echo $itemName.'<br>';
echo 'Categories: '.implode(', ',$categories);
}
答案 4 :(得分:0)
如果您无法更改从数据库获取数据的查询,则可以使用PHP帮助程序函数array_unique
。此函数从数组中删除重复值。虽然最好在MySQL中执行此操作,但开发人员并不总是可以轻松地执行此操作,因此这会有所帮助。以下是此函数的PHP手册链接: