Php findAll(),其中不在表yiiframew中

Php findAll(),其中不在表yiiframew中,php,sql,yii,models,Php,Sql,Yii,Models,他在那里, 我的数据库中有两个表:成就和成就完成。我想选择所有成就,除非有一个成就完成条目,该成就作为外键约束 例如: 表中有3行: ID:1-成就1 ID:2-成就2 ID:3-成就3 表AchievementCompleted中有一个条目: $criteria=new CDbCriteria; $criteria->join='RIGHT JOIN Achievements ON AchievementsCompleted.Achievement_id=Achievemen

他在那里,

我的数据库中有两个表:成就和成就完成。我想选择所有成就,除非有一个成就完成条目,该成就作为外键约束

例如:

表中有3行:

ID:1-成就1 ID:2-成就2 ID:3-成就3 表AchievementCompleted中有一个条目:

   $criteria=new CDbCriteria;
   $criteria->join='RIGHT JOIN Achievements ON AchievementsCompleted.Achievement_id=Achievements.id';
   $models = AchievementsCompleted::model()->findAll($criteria);
成就_id=2由用户3完成 在这种情况下,我希望输出仅为用户3的id 1和3的模型

$criteria = new CDbCriteria();
$criteria->condition = "";
$models = Achievements::model()->findAll($criteria);
提前谢谢!我希望这是有道理的

试试这个

$criteria = new CDbCriteria;
$criteria->join ='INNER JOIN AchievementsCompleted';
$criteria->condition = "AchievementsCompleted.achievement_id != Achievements.id";
$models = Achievements::model()->findAll($criteria);

您需要使用正确的联接:

以下是您获得的所有尚未完成的成就:

   $criteria=new CDbCriteria;
   $criteria->join='RIGHT JOIN Achievements ON AchievementsCompleted.Achievement_id=Achievements.id';
   $models = AchievementsCompleted::model()->findAll($criteria);
您需要用自己的列id和id替换表列

下面是一个直观的图表,解释了SQL联接的工作原理:

查看cdbcriteria的文档,了解其加入或与的关系。您能给我举个例子吗?文档太模糊了。谢谢。你可以试着编写自己的查询并使用findAllBySqlHe Wissam,这实际上给了我一个已完成的成就列表。我怎样才能把它变成一个未完成的成就列表?谢谢根据您的示例,这就是我所拥有的:$criteria=newcdbcriteria$条件->join='RIGHT join tbl_成就在t.Achavity_id=tbl_成就.id'上$条件->条件='user\u id='。Yii::app->user->id$models=实现completed::model->findAll$标准;