Как получить общее количество, используя 3 таблицы с объединением в YII?

#php #mysql #yii

#php #mysql #иии

Вопрос:

У меня есть 3 таблицы mysql (order, camp, user) в качестве нижеприведенных значений,

 order_table
ID    camp_id       orderDate       
1       1           2015-01-01
2       1           2015-02-01
3       2           2015-03-01
4       3           2015-01-01
5       4           2015-04-01
6       2           2015-01-01
7       4           2015-07-01

camp_table
camp_id uid     camp name
1       10             first camp
2       11             second camp
3       12             third camp
4       10             forth camp

user_table
uid    uname
10      abc
11      xyz
12      wrt
 

как и в приведенном выше примере, я хочу иметь количество записей order_table для user_table (uid 10) в YII1, используя

 $criteria = new CDbCriteria();
 

метод.

или любой другой метод, но работающий быстро, так как в order_table есть миллион записей

я перепробовал все варианты, которые смог найти, но ни один из них мне не подходит.

Спасибо за помощь.

Комментарии:

1. пожалуйста, опишите, какие варианты вы пробовали.

Ответ №1:

Попробуйте это, это может вам помочь.
Критерии Yii:

 $criteria = new CDbCriteria;
// $criteria->select    = '*';
$criteria->join      = 'INNER JOIN company ON order.company_id = company.id';
$criteria->join     .= 'INNER JOIN user ON company.user_id = user.id';
$criteria->condition = 'user.id=:id';
$criteria->params    = array(':id'=>10);

$customers = Order::model()->count($criteria);
 

Запрос Mysql:

 SELECT count(*)
FROM `order`
INNER JOIN `company` ON `order`.`company_id` = `company`.`id`
INNER JOIN `user` ON `company`.`user_id` = `user`.`id`

WHERE `user`.`id` = 10;
 

Ответ №2:

Попробуйте с этим:

 $criteria->condition = 'ot.orderDate =:Date';
$criteria->join = 'INNER JOIN camp_table ct ON ot.camp_id =ct.camp_id
INNER JOIN user_table ut on ut.uid  = ct.uid';
$criteria->params = array(':Date'=>$date);