Php 连接三个表的查询yii
如何将mysql查询转换为yii 我有三张桌子Php 连接三个表的查询yii,php,mysql,yii,Php,Mysql,Yii,如何将mysql查询转换为yii 我有三张桌子 用户头 顾客 客户评级 这是我的sql查询 SELECT t.email FROM otz_user_header t JOIN otz_customers r ON t.user_id = r.customer_user_id JOIN otz_customer_ratings cr ON cr.customer_user_id = r.customer_user_id
SELECT t.email
FROM otz_user_header t
JOIN otz_customers r
ON t.user_id = r.customer_user_id
JOIN otz_customer_ratings cr
ON cr.customer_user_id = r.customer_user_id
WHERE r.rate_auto_approve = 0
AND r.rate_email_time IS NOT NULL
AND r.total_rating_count IS NOT NULL
AND cr.rating_date < Curdate()
AND cr.rating_date > Date_sub(Curdate(), INTERVAL 7 day)
选择t.email
来自otz_用户_标题t
加入otz_客户r
在t.user\u id=r.customer\u user\u id上
加入otz_客户_评级cr
在cr.customer\u user\u id=r.customer\u user\u id上
其中r.rate\u auto\u approve=0
并且r.rate\u email\u time不为空
并且r.total_rating_count不为空
和cr.rating_datedate_sub(Curdate(),间隔7天)
如何将此查询转换为yii
提前感谢。使用DAO(数据访问对象)
型号
公共功能测试(){
$sql=“选择t.email
来自otz_用户_标题t
在t.user\u id=r.customer\u user\u id上加入otz\u客户r
加入otz_customer_ratings cr ON cr.customer_user_id=r.customer_user_id
其中r.rate\u auto\u approve=0
并且r.rate\u email\u time不为空
并且r.total_rating_count不为空
和cr.rating_datedate_SUB(CURDATE(),间隔7
"天";;
返回Yii::app()->db->createCommand($sql)->queryAll();
}
“itachi”的答案是正确的,但如果您正在以activerecord的方式查找
型号:UserHeader
关系:
'activeCustomers' => array(
self::HAS_MANY,
'Customer',
'customer_user_id',
'condition' => 'activeCustomers.rate_auto_approve=0
AND activeCustomers.rate_email_time IS NOT NULL
AND activeCustomers.total_rating_count IS NOT NULL'
),
型号:客户
关系:
'lastWeekRatings' => array(
self::HAS_MANY,
'CustomerRating',
'customer_user_id',
'condition' => 'lastWeekRatings.rating_date < CURDATE()
AND lastWeekRatings.rating_date > DATE_SUB( CURDATE(), INTERVAL 7 DAY )'
),
您可以直接在Yii中运行mysql语句。但是如果你想使用活动记录的方法,你可以咨询Yii的文档。有一个问题我不明白。对于具有多个连接的复杂查询,活动记录在任何基准测试中都比DAO慢。即使是yiis指南也提到了这一点。就我很久以前所做的,我总是发现它慢了一秒钟。但人们仍然选择活动记录。。。。我是不是遗漏了什么?甚至查询生成器也比AR快。如何使用foreach语句访问这些数据?@ElsonSolano,findAll()始终返回数组(或arrayaccess对象)。您可以循环使用foreach($useremails as$userHeader),并可以访问“$userHeader->email”字段和关系“$userHeader->activeCustomers”这是客户记录列表,而“$userHeader->activeCustomers->lastWeekRatings”这是CustomerRating对象列表。
'lastWeekRatings' => array(
self::HAS_MANY,
'CustomerRating',
'customer_user_id',
'condition' => 'lastWeekRatings.rating_date < CURDATE()
AND lastWeekRatings.rating_date > DATE_SUB( CURDATE(), INTERVAL 7 DAY )'
),
$useremails = UserHeader::model()
->with('activeCustomers', 'activeCustomers.lastWeekRatings')
->findAll(array(
'select' => 't.email'
));
print_r($useremails);