我有
等数据库
我想创建一个关联数组,使每个att_name
值与att_value
的可能值相关联:
array('att_name' => array('att_value_1', 'att_value_2', 'att_value_3'))
实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
虽然很容易通过选择你想要的结果并在PHP中迭代它们以创建你想要的数据结构来做到这一点,你可以用GROUP_CONCAT()
将一部分工作分配给MySQL:
$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);
当然,这仅适用于您的值永远不会包含您在MySQL查询中用于SEPARATOR
的字符(或字符序列),因此更安全的纯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);
答案 1 :(得分: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;
....
....
}
答案 2 :(得分: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_value
将<!>
的结果展开。我使用此<!>
,因此很难在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);
}