0

我有这个:有产品的表,每个产品都有超过 1 种颜色,例如:

  1. 玻璃有红色、绿色
  2. 球有红色、绿色、黄色

我只想获得一次颜色,但是使用下面的代码,我会收到每种产品的不同数组。array_merge 不会以某种方式将所有数组合并到一个数组中。请帮助我:

  1. 将数组合并为一个
  2. 删除新数组中的重复颜色。
$query='SELECT GROUP_CONCAT(DISTINCT colors SEPARATOR ", ") FROM products WHERE colors!="" GROUP BY colors';

$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);

if($num_rows){
  while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

  $array = array($row[0]);

  $colors = array_merge($array);

  var_dump($colors ); 

}
4

4 回答 4

1

您是否只想要一系列颜色而不考虑产品?尝试这个:

SELECT DISTINCT colors FROM products WHERE colors != ''

我在这里猜,但我认为你的颜色列只是一个逗号分隔的颜色列表。这并不是做这种事情的最佳方法,但无论如何......尝试上面的查询,然后在 php

$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);

if($num_rows){
$colors = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

    $array = explode(',' $row[0]);  // your row is just a string, explode it to get an array
    $colors = array_merge($colors, $array); // merge that into the colors array
}

$colors = array_map('trim', $colors); // in case there was any whitespace in your color strings
$colors = array_filter($colors); // remove any empties
$colors = array_unique($colors); // strip out the dupes
于 2012-05-21T07:57:07.497 回答
0

不要 CONCAT 颜色,而是重写 SQL,以便为每种颜色获取一行。将它们全部添加到一个数组中,然后运行array_filter()

于 2012-05-21T07:55:00.063 回答
0
$query='SELECT DISTINCT colors FROM products WHERE colors !=""';
$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$colors = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $colors[] = $row[0]; 
}
var_dump($colors); 
于 2012-05-21T07:57:57.410 回答
0

如果我正确理解了您的问题,这意味着您想要由所有项目中的所有颜色组成的单个数组并且该数组必须是唯一的,您应该执行以下操作:您应该声明$colors退出 while 循环,然后替换array_merge为检查的函数如果提供的颜色在$colors数组中,如果没有,则添加到它。代码如下:

$query='SELECT GROUP_CONCAT(DISTINCT colors SEPARATOR ", ") FROM products WHERE colors!="" GROUP BY colors';

$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);
$colors=array();
if($num_rows){
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

$array = array($row[0]);

$colors = array_merge($array);


}
$colors=array_unique($input);
var_dump($colors);
于 2012-05-21T07:58:49.407 回答