次のようなデータベースがあります
att_name
各値が からの可能な値に関連付けられるように、連想配列を作成したいと思いatt_value
ます。
array('att_name' => array('att_value_1', 'att_value_2', 'att_value_3'))
これを達成するための最良の方法は何ですか?
次のようなデータベースがあります
att_name
各値が からの可能な値に関連付けられるように、連想配列を作成したいと思いatt_value
ます。
array('att_name' => array('att_value_1', 'att_value_2', 'att_value_3'))
これを達成するための最良の方法は何ですか?
これは、必要な結果を選択し、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);
こちらです :
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_value
a で分解する必要があり<!>
ます。私はこれを使用している<!>
ので、これで内部に値を持つことは非常に不可能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);
}
以下を試してください:
$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;
....
....
}