在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
withGROUP\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一行的同时最好地保留关联呢?