输出mysql结果作为表单的数组(列名=>列名的可能值)

时间:2012-06-08 16:40:47

标签: php mysql associative-array

我有

等数据库

我想创建一个关联数组,使每个att_name值与att_value的可能值相关联:

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

实现这一目标的最佳方法是什么?

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);
}
相关问题