1

次のようなデータベースがあります

att_name各値が からの可能な値に関連付けられるように、連想配列を作成したいと思いatt_valueます。

array('att_name' => array('att_value_1', 'att_value_2', 'att_value_3'))

これを達成するための最良の方法は何ですか?

4

3 に答える 3

1

これは、必要な結果を選択し、PHP で反復して必要なデータ構造を作成するだけで簡単に実行できますが、次のようにして、一部の作業を MySQL にサブスクライブできますGROUP_CONCAT()

$query = "
  SELECT att_name, GROUP_CONCAT(att_value SEPARATOR ',') AS values
  FROM table_name
  GROUP BY att_name
";
$result = mysql_query($query);

$array = array();
while ($row = mysql_fetch_assoc($result)) {
  $array[$row['att_name']] = explode(',', $values);
}

print_r($array);

もちろん、これはSEPARATOR、MySQL クエリで使用する文字 (または一連の文字) が値に決して含まれない場合にのみ機能するため、より安全な純粋な PHP の方法は次のようになります。

$query = "
  SELECT att_name, att_value
  FROM table_name
";
$result = mysql_query($query);

$array = array();
while ($row = mysql_fetch_assoc($result)) {
  $array[$row['att_name']][] = $row['att_value'];
}

print_r($array);
于 2012-06-08T17:05:18.767 に答える
0

こちらです :

SELECT
    item,
    att_name,
    GROUP_CONCAT(att_value SEPARATOR "<!>") AS att_value
FROM
    table
GROUP BY
    att_name

あなたにそのようなものを与えるでしょう:

item    att_name    att_value
-----------------------------
books   height      150 mm<!>250 mm
books   price       rs:20<!>Rs:20
books   size        15 pg<!>30 pg<!>60 pg
books   width       300 mm<!>400 mm

からの結果をatt_valuea で分解する必要があり<!>ます。私はこれを使用している<!>ので、これで内部に値を持つことは非常に不可能att_valueです。いつかこれを使用すると思われる場合は、別のセパレーターを使用してください。例: [{--}]_SEPARATOR_[_-CUT-_]など。 100% 確実に選択できるものは使用しませんが、常にテキストを分割するためのセパレーターとして使用します。

例:

$SQL = 'SELECT item, att_name, GROUP_CONCAT(att_value SEPARATOR "<!>") AS att_value FROM table GROUP BY att_name';
$Query = mysql_query($SQL) or die('MySQL Error : '.mysql_error());

while($Assoc = mysql_fetch_assoc($Query)){
    $Assoc['att_value'] = ($Assoc['att_value'] != '' ? explode('<!>', $Assoc['att_value']) : NULL);
    print_r($Assoc);
}
于 2012-06-08T17:03:24.900 に答える
0

以下を試してください:

$sql = "SELECT * from tablename";
$result = mysql_query($sql,$con);
$final_array=array();
 while ($row = mysql_fetch_object($result))
   {
      $final_array[$row->att_name][0]=$row->att_value_1;
      $final_array[$row->att_name][1]=$row->att_value_2;
      ....
      ....
   }
于 2012-06-08T16:49:59.517 に答える