gpt4 book ai didi

mysql - Yii CDbCriteria 查询匹配一个表中的多行

转载 作者:行者123 更新时间:2023-11-29 06:06:55 25 4
gpt4 key购买 nike

我试图弄清楚如何使用 Yii 的 CDbCriteria 构建一个查询,该查询相当于以下内容:

 SELECT 
*
FROM
user u
JOIN (
SELECT *
FROM skill_assessment s
WHERE s.skill = 'HTML'
AND s.score >= 80
) b ON
(u.id = b.userId)
JOIN (
SELECT *
FROM skill_assessment s
WHERE s.skill = 'CSS3'
AND s.score >= 80
) c ON
(u.id = c.userId);
etc...

这是我到目前为止所拥有的,但不起作用:

$criteria = new CDbCriteria();
$criteria->alias = "u";
$criteria->select = "*";
$criteria->join = "JOIN skill_assessment s ON (u.id=s.userId)";
for($i = 0; $i < count($skill_filters); $i++) {
$criteria->addCondition("s.skill='".$skill_filters[$i]->skill."' AND s.score >= ".$skill_filters[$i]->level);
}

$users = UserModel::model()->findAll($criteria);

任何帮助将不胜感激。提前致谢。

编辑:我能够将 sql 查询构建为字符串并使用 findAllBySql,它返回与我的搜索条件匹配的正确 UserModel,问题是我无法让它返回相关的 SkillAssessmentModel。他们也不会返回初始查询,如下所示:

$users = UserModel::model()->with('skill_assessments')->findAllBySql($sql);

如果我得到这样的结果:

$users = UserModel::model->findAllBySql($sql);
foreach($users as $user)
{
$user->skill_assessments = $user->getRelated('skill_assessments');
}

关于如何获得这些相关模型有什么想法吗?奇怪的是,在我的应用程序的其他地方,如果我这样做,我可以获得相关模型:

$user = UserModel::model->findByPk($id);
$user->skill_assessments->getRelated('skill_assessments');

最佳答案

addCondition 的第二个参数默认为 'AND'。这是你想要的?也许您应该为 $operator 定义 'OR' 并在条件周围添加大括号。但在您的情况下,addCondition 将应用于user 表,而不是JOIN

我认为这应该适合你:

$criteria = new CDbCriteria();
$criteria->alias = "u";
$criteria->together= "skill_assessment";
$where = array();

for($i = 0; $i < count($skill_filters); $i++) {
$where[] = "(s.skill='".$skill_filters[$i]->skill."' AND s.score >= ".$skill_filters[$i]->level . ')';
}
$criteria->join = 'JOIN skill_assessment s ON (u.id=s.userId' . ( $where ? ( ' AND (' . join( ' OR ', $where ) . ')' ) : '') . ')';

$users = UserModel::model()->findAll($criteria);

像这样获取_skill_assessment_:

foreach( $users->skill_assessment as $skill_assessment )
{
echo $skill_assessment->userId;
}

关于mysql - Yii CDbCriteria 查询匹配一个表中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com