在php中忽略重复的mysql值

在php中忽略重复的mysql值,php,mysql,Php,Mysql,一旦我运行查询,将多个列连接在一起,就会得到如下结果: 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))

一旦我运行查询,将多个列连接在一起,就会得到如下结果:

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'];
}
while($results=mysql\u fetch\u数组($raw\u results)){
回显$results['item']。
; echo“类别:.$results['Category']; }
它给出了:

<div>
Item 1
Category: A
</div>

<div>
Item 1
Category: B
</div>

项目1
类别:A
项目1
类别:B
以此类推,但我需要做的是将每个ID的所有值合并到一个空间中,结果如下所示:

<div>
Item 1
Category: A, B, C
</div>

<div>
Item 2
Category: A, D
</div>

<div>
Item 3
Category: B, E
</div>

项目1
类别:A、B、C
项目2
类别:A、D
项目3
类别:B、E

最好的方法是什么?我应该用每个ID的行创建另一个数组,并循环使用它(以及如何设置数组?)还是有其他内容?

尝试
groupby
with
GROUP\u CONCAT


尝试
分组方式
分组方式


您可以在查询中完成这一切,而不必依赖PHP

  Select item, group_concat(category) FROM yourtable GROUP BY Item

您可以在查询中完成这一切,而不必依赖PHP

  Select item, group_concat(category) FROM yourtable GROUP BY Item

为每个项目创建类别数组:

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);
}
foreach($items作为$itemName=>$categories){
回显$itemName。“
”; echo“Categories:”。内爆(“,”,$Categories); }
为每个项目创建一个类别数组:

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);
}
foreach($items作为$itemName=>$categories){
回显$itemName。“
”; echo“Categories:”。内爆(“,”,$Categories); }
我会这样做:

select id, item, group_concat(category) from Table1
group by id, item

我会这样做:

select id, item, group_concat(category) from Table1
group by id, item

如果您无法更改从数据库获取数据的查询,则可以使用PHP助手函数
array\u unique
。此函数用于从数组中删除重复值。虽然在MySQL中这样做更好,但开发人员并不总是能够轻松地做到这一点,因此这会有所帮助。以下是有关此函数的PHP手册的链接:


如果您无法更改从数据库获取数据的查询,则可以使用PHP助手函数
array\u unique
。此函数用于从数组中删除重复值。虽然在MySQL中这样做更好,但开发人员并不总是能够轻松地做到这一点,因此这会有所帮助。以下是有关此函数的PHP手册的链接:


看来我需要的是团队合作。我在多个列上测试了它,它似乎起了作用,但为了证实这一点——假设我还有两个列,比如说,一个地址和一个城市,那么第1项应该是address1,city1;地址2,城市2;地址3,城市3。GROUP_CONCAT始终保持相同的顺序,返回address1、address2、address3和city1、city2、city3?为了进一步跟进(因为我的实际数据比我的示例更复杂),如果项目1占用九行而没有分组(三个类别,每个类别都有三个地址),会怎么样?对它们进行分组要么得到A,A,A,B,B,B,C,C,或者使用DISTINCT将得到A,B,C,但这样我就失去了类别和地址之间的关联。我可以在多个列上连接吗?我想要的HTML输出是类别:A(在addr1、city1或address2、city2或addr3、city3),B(在addr1、city1或addr4、city4或addr5、city5),C(在addr1、city1或addr2、city2或addr6、city6)。我确信其中一些需要PHP端的代码,但是如何在保持每个ID一行的同时最好地保留关联呢?看起来我需要的是GROUP_CONCAT。我在多个列上测试了它,它似乎起了作用,但为了证实这一点——假设我还有两个列,比如说,一个地址和一个城市,那么第1项应该是address1,city1;地址2,城市2;地址3,城市3。GROUP_CONCAT始终保持相同的顺序,返回address1、address2、address3和city1、city2、city3?为了进一步跟进(因为我的实际数据比我的示例更复杂),如果项目1占用九行而没有分组(三个类别,每个类别都有三个地址),会怎么样?对它们进行分组要么得到A,A,A,B,B,B,C,C,或者使用DISTINCT将得到A,B,C,但这样我就失去了类别和地址之间的关联。我可以在多个列上连接吗?我想要的HTML输出是类别:A(在addr1、city1或address2、city2或addr3、city3),B(在addr1、city1或addr4、city4或addr5、city5),C(在addr1、city1或addr2、city2或addr6、city6)。我确信其中一些需要PHP端的代码,但是如何在保持每个ID一行的同时最好地保留关联呢?