0

私はこれを持っています:製品を持ち、各製品に複数の色があるテーブル:

  1. ガラスには赤、緑の色があります
  2. ボールには赤、緑、黄色の色があります

色だけを一度だけ取得したいのですが、次のコードを使用すると、製品ごとに異なる配列を受け取ります。array_merge は、すべての配列を 1 つの配列にマージしません。

  1. 配列を 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

色を連結しないで、色ごとに行を取得するように 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

私があなたの質問を正しく理解した場合、つまり、すべてのアイテムにあるすべての色で構成される単一の配列が必要であり、この配列が一意でなければならない場合は、次のことを行う必要があります: $colorswhile ループから宣言し、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 に答える