cds-wh 2011-11-04 16:48:28 3707次浏览 2条回复 0 0 0

有三个数据表:

a:id    play_code     
b:id     uid     phone
c:id   sub_id   sub_email

关系是:b.id对应a.play_code,b.uid对应c.id。现在要显示一个列表,a.id,a.play_code,b.phone,c.sub_id,c.sub_email

在a表对应的model中设置了关系:'ext'=>array(self::HAS_ONE ,'b','id'), 在b表对应的model中设置了关系:'sub'=>array(self::BELONGS_TO ,'c','uid'),

然后:

$criteria = new CDbCriteria();
$criteria->with = 'ext';
$a = A::model()->findAll($criteria);

可成功查到相应的数据: $a->id,a->play_code,a->ext->phone,a->ext->sub->sub_id,a->ext->sub->sub_email 现在遇到的问题是,如果想根据b.phone或c.sub_id应该怎么做,具体点就是: $criteria->order = ? 想了好久没解决,希望大家帮帮忙,先谢谢了(注:数据库实际情况比较复杂,这里只是把关键的提出来了,所以不存在改数据库的情况)

  • 回复于 2011-11-07 16:14 举报

    跟踪了下sql,问题解了,还挺费劲,在这里分享下:

    $criteria = new CDbCriteria();
    $criteria->with = array('ext','ext.sub');
    $criteria->order = 'sub.sub_id asc';  
    $a = A::model()->findAll($criteria);
    

    注:主表的代号默认是t,比如要按a表的play_code排序,则:t.play_code asc; 如果按b表的phone排序,则ext.phone asc

  • 回复于 2011-11-07 17:08 举报

    学习了非常好。感谢分享

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