latsu 2012-09-04 15:54:34 2660次浏览 1条回复 0 0 0

需要查询三张表, 有没有系统自带的方法? 我自己写的代码可以实现, 虽然是后台, 也想知道yii有没有系统自带的方法. 我的代码:

public function getAppInformation($search,$pagesize){
$db = Yii::app()->db; 
$sql = "select * from `app` as a inner join `user` as u on a.uid = u.id inner join `shop` as s on s.id = a.sid ";
$sql_num = "select count(*) as num from `app` as a inner join `user` as u on a.uid = u.id inner join `shop` as s on s.id = a.sid ";
if(isset($search['username'])){
	$sql .= "and (where u.name like '%".$search['username']."%')";
}
if(isset($search['shopname'])){
	$sql .= "and (where s.name like '%".$search['shopname']."%')";
}
if(isset($search['cid'])){
	$sql .= "and (where a.cid=".$search['username'].")";
}
$sql .= "limit 0," . $pagesize;
$app = $db->createCommand($sql)->queryAll();
$num = $db->createCommand($sql_num)->queryScalar();
array_unshift($app,$num);
return $app;   
}

CDbDataReader 这个方法里面我也试用了几个,好像不行...求解...跪拜...

  • 回复于 2012-09-04 19:28 举报

    如果用AR的话,可以在relations()里面设好关系,实现这种访问。但是由于是基于user和shop两种不同的model来查的,所以需要分开处理。所以,如果是我的话,我会在mysql中先用视图把所有记录,join起来,对应地生成一个model,然后随便查找了findBy**()就OK 了。当然,视图有了之后,可以随便用DAO。

    另外,如果是我的话,会先where出来表,再用这个表去join其他的表。只是,我不确定,你的那个3个join在一起的,MYSQL会不会自动优化。所以,并不确定这点。

您需要登录后才可以回复。登录 | 立即注册