需求背景:
在添加文章的时候,文章有多少个附件不清楚,因此数据库设计时,需要设置一存放文章的数据表,再设置一存放附件的数据表,问题出来了,由于同一文章的数据来自不同的表,需要在读取数据的时候,把附件表中的附件也读取出来。
数据表的设计
文章
id content
附件
id realname(上传的文章名) filename(保存的临时名字) fid(是文章的id,通过id与文章相关联)
为了看得更清晰,代码只截取能说明文题的代码片断:
html代码
width="2%"> class="check"> | width="20%">新闻标题 | width="8%">作者 | width="30%">新闻摘要 | width="30%">新闻附件 | width="10%">添加时间 |
---|
name="a_list" id="a_vo">
type="checkbox" class="ids"
name="{$a_vo.id}">
href="#">{$a_vo.title}
{$a_vo.author}{$a_vo.note}{$a_vo.att}{$a_vo.creat_time}ThinkPHP Action代码
function manage(){
$a_info=M('Article');
$u_info=M('Unit');
$att_info=M('Attachment');
$u_list=$u_info->order('id
asc')->select();
foreach($u_list as $k
=> $v){
$u_list[$k]['total']=$a_info->where('uid='.$v['id'])->count();
}
$a_total=$a_info->select();
$total=count($a_total);
import('ORG.Util.Page');
$page=new
Page($total,15);
$page->setConfig('header','篇新闻');
$page->setConfig('first','首
页');
$page->setConfig('last','末
页');
$page->setConfig('prev','上一页');
$page->setConfig('next','下一页');
$show=$page->show();
$a_list=$a_info->order('id
asc')->limit($page->firstRow.','.$page->listRows)->select();
foreach($a_list as $k
=> $v){//这个foreach是解决此问题的核心代码
$att=$att_info->where('fid='.$v['id'])->select();
$i=0;
$arr="";//此处清空一下,以免上次数据累加显示
while($i
$arr.=$att[$i]['realname']."
";
$i++;
}
$a_list[$k]['att']=$arr;
}
$this->assign('total',$total);
$this->assign('a_list',$a_list);
$this->assign('u_list',$u_list);
$this->assign('page',$show);
$this->display();
}
以上是做项目时解决的小问题,哪位大侠有更好的见解,希望不啬赐教 :)