日期:2014-05-17  浏览次数:20626 次

数据库查询结果构建多维数组
我想将前面数据库查询出来的结果构建一个多维数组,数据库查询出来的第一个结果对应第一层嵌套,第二个结果对应第二层嵌套,如何做,事先声明我是菜鸟,请多指点

// 查询变量

$sql1 = "select remark,name from arp_careset where typegroup ='dissect-position' order by id"; 
$rs1 = mysql_query($sql1); 

while($r1 = mysql_fetch_assoc($rs1)) 
{ echo  $r1['name']; 

$sql = "select group_concat(name) as name from arp_careset where typegroup <>'dissect-position' and typegroup like '%".$r1["remark"]."%' order by id";
$rs = mysql_query($sql); 

while($r = mysql_fetch_array($rs)) 
{ $ar = explode(',', $r['name']); 
echo join(' ', $ar); 
} }
//构建数组

$mem = array(
array
(
 lang_show(''),
array
(
// 嵌套开始
array(
lang_show('account_manager'),
//第二层嵌套
array(
'group_list.php,1',
)
//第二层嵌套结束
),
// 嵌套结束
)  
),
);

------解决方案--------------------
你的数据组织给你的读出带来了很多不便
这样写
$rs = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, remark from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='dissect'");
while($r = mysql_fetch_assoc($rs)) {
  echo $r['name']. '<br />';
  $rs1 = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, remark from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='$r[secondary]' and SUBSTRING_INDEX(typegroup,'-',-1) = '$r[remark]'");
  while($r = mysql_fetch_assoc($rs1)) {
    echo $r['name'] . ' ';
  }
  echo '<br />';
}


体表
营养状况 分泌物 被毛 皮肤 眼/眼眶 四肢/尾巴 乳腺 外生殖器 肛门 
淋巴结
腋窝淋巴结 颈部淋巴结 腹股沟淋巴结 肺部淋巴结 肠系淋巴结 
头颈部
眼睑/角膜/瞳孔 牙齿/牙龈 耳 鼻 脑膜/全脑 颅骨 唾液腺 食管 气管 甲状腺 
胸部
胸壁 横膈/纵膈 心脏 主动脉弓 肺及支气管 
腹部
腹腔 肠系膜 脾脏 胰 肾脏 

------解决方案--------------------
为什么说数据组织的不好呢?
主分组 typegroup 包含了两个类别信息
而按“邻接列表算法”应该只包含一个类别信息
从你的数据上看,需要通过 typegroup、remark 两个字段来唯一确认一个表象的归属
这实际上就是“邻接列表算法”了

虽然现在可以用 SUBSTRING_INDEX 函数去拆分 typegroup 来得到类别信息
但 SUBSTRING_INDEX 函数是 mysql 专有的。如果因为某些原因,以后更换了数据库系统,那代码修改量就太大了

虽然你可以将拆分的工作交给 php 完成,但众多的 like 将降低查询效率
程序也显得比较臃肿
------解决方案--------------------
创建多维数组示意
$res = array(); //这是结果数组
$rs = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, remark from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='dissect'");
while($r = mysql_fetch_assoc($rs)) {
  $tmp = array(); //初始化一个临时数组
  $rs1 = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, remark from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='$r[secondary]' an