他在那里,
我的数据库中有两个表:“Achievements”和“AchievementsCompleted”。我想选择所有成就,除非有一个AchievementCompleted条目将该成就作为外键约束。
例如:
表格中有3行成就:
并且表AchievementCompleted中有一个条目:
在这种情况下,我希望输出只是用户3的id 1和3的模型。
$criteria = new CDbCriteria();
$criteria->condition = "";
$models = Achievements::model()->findAll($criteria);
提前致谢!我希望这是有道理的。
答案 0 :(得分:0)
试试这个
$criteria = new CDbCriteria;
$criteria->join ='INNER JOIN AchievementsCompleted';
$criteria->condition = "AchievementsCompleted.achievement_id != Achievements.id";
$models = Achievements::model()->findAll($criteria);
答案 1 :(得分:0)
你需要使用RIGHT JOIN:
在这里,你获得了所有未完成的成就":
$criteria=new CDbCriteria;
$criteria->join='RIGHT JOIN Achievements ON AchievementsCompleted.Achievement_id=Achievements.id';
$models = AchievementsCompleted::model()->findAll($criteria);
您需要将表列替换为您自己的列(" Achievement_id"和" id")。
这是一个解释SQL联接如何工作的可视化图表: What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?