查找两个链接表之间的不匹配项


Find mismatches between two linked tables

我的Yii 1.1网站有点问题。

我有两张桌子,UserArtistsArtists. UserArtists通过文件上传,包含两个字段(hash, artist_id)其中hash是用户哈希,artist_id是艺术家表的idArtists包含艺术家信息。

填充UserArtists的文件是从外部源生成的,artist_idhash都与我们的表不匹配,因此它包含实际数据中不存在的hash值和artist_id值。

现在,我需要做的是添加一些统计数据。我对hash不匹配完全没问题,但我需要找出已上传到我们UserArtists表中的artist_id中有多少没有出现在表外Artists

通过纯mysql请求,我可以通过以下方式实现此结果:

SELECT COUNT(`ua`.*) FROM UserArtists `ua`
LEFT OUTER JOIN Artists `a` ON `ua`.`artist_id` = `a`.`id`
WHERE `a`.`id` IS NULL

但是我很难将此查询转换为 Yii CDbCriteria.将不胜感激的帮助。

编辑:除了获取此信息以进行统计(我可以用CDbCommand做到这一点),我还需要能够删除所有具有无效artist_id的记录,为此我需要某种方法来执行自定义查询。

此 SQL 查询应该足以删除 UserArtists 中在 Artists 中找不到匹配项的记录:

DELETE FROM UserArtists
WHERE artists_id NOT IN (SELECT artists_id FROM Artists)

这应该返回您想要的数字:

SELECT COUNT(*) FROM UserArtists

你可以这样做:

$sql = 'DELETE FROM UserArtists
        WHERE artists_id NOT IN (SELECT artists_id FROM Artists)';
$numberOfEffectedRows = Yii::app()->db->createCommand($sql)->exectue();
$numberOfValidItems = UserArtists::model()->count();