Помогите С Выборкой

Всем доброе утро. Есть 3 таблицы - brands, services и items. brands - что-то вроде категорий, services - аналогично, но все services одинаковы для каждого brands. Т.е. к примеру у brand Mercedes есть services ремонт, тюнинг и т.д. У бренда Skoda аналогично будут те же services что и у Mercedes(ремонт, тюнинг и т.д.). brands и services между собой не связаны. Items это вроде фирм, которые предоставляют услуги по brand и services, структура Items следующая:

id

brand_id

service_id

В brands сделал выборку по условию items.brand_id = brands.id. А вот как организовать выборку еще и по service_id не пойму :(

Т.е. кликаем к примеру на бренд Mercedes получаем список всем фирм(items) где brand_id = Mercedes, плюс на этой странице еще есть список всех services(общий для всех brands). Как выбрать при клике на services тюнинг к примеру, все Items с brand_id=Mercedes и service_id=тюнинг находясь к примеру в brands Mercedes ?

из того что у тебя есть и я понял сделал так бы




class BrandModel extends CActiveRecord{


    public function relations()

    {

        return array(

            'firms' => array(self::HAS_MANY, 'FirmModel', 'brand_id'),

        );

    }


}




class FirmModel extends CActiveRecord{

    public function relations()

    {

        return array(

            'brand' => array(self::BELONGS_TO, 'BrandModel', 'brand_id'),

            'service' => array(self::BELONGS_TO, 'ServiceModel', 'service_id'),

        );

    }


}


class ServiceModel extends CActiveRecord{


    public function relations()

    {

        return array(

            'firms' => array(self::HAS_MANY, 'FirmModel', 'service_id'),

        );

    }


}


function actionFirms($brand_id, $service_id=""){

    $criteria=new CDbCriteria();

    $criteria->compare('brand_id',$brand_id);

    if(!empty($service_id))

        $criteria->compare('service_id', $service_id);


    /*$criteria->order = "name asc"; //чтоб покрасивше

    $criteria->order = "ratio asc"; //или по рэйтингу

    */


    $dataProvider=new CActiveDataProvider('FirmModel', array(

        'criteria' => $criteria,

        'pagination'=>array(

            'pageSize'=>20,

        ),

    ));


    $this->render('firms', array('brand_id' => $brand_id,'service_id' => $service_id, 'dataProvider' => $dataProvider));

}



но честно говоря это немного не то потому что фирма по идее может выполнять не только 1 услугу и обслуживать не только один бренд!

то тогда нужны промежуточные связующие таблицы и запрос будет посложнее




$dataProvider=new CActiveDataProvider('Brand', array(

		    'criteria'=>array(

			'with'=>array(

		    	   'items',

			   'service',

				),

		    'order'=>'id DESC',//сортировка для красоты	

		    'together'=>true,//принудительное соединение таблиц	

		    'condition'=>'items.brand_id='.$brand_id.' AND service.service_id='.$service_id,

		    ),

		));



Вот как то так, если средствами AR. А вообще в сложных местах лучше делать просто выборки или использовать DAO.

И все таки нужно сделать relations так как написал Mihail.

Спасибо :)