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

Php 查找两个链接表之间的不匹配,php,yii,Php,Yii,我的Yii 1.1网站有点问题 我有两张桌子,用户艺术家和艺术家。UserArtists是通过文件上传的,它包含两个字段hash,artist_id,其中hash是用户hash,artist_id是artist表的id。艺术家包含艺术家信息 从中填充UserArtists的文件是从外部源生成的,并且Artister\u id的哈希值与我们的表都不匹配,因此它同时包含实际数据中不存在的哈希值和Artister\u id值 现在,我需要做的是添加一些统计数据。我对散列不匹配非常满意,但我需要找出有多

我的Yii 1.1网站有点问题

我有两张桌子,用户艺术家和艺术家。UserArtists是通过文件上传的,它包含两个字段hash,artist_id,其中hash是用户hash,artist_id是artist表的id。艺术家包含艺术家信息

从中填充UserArtists的文件是从外部源生成的,并且Artister\u id的哈希值与我们的表都不匹配,因此它同时包含实际数据中不存在的哈希值和Artister\u id值

现在,我需要做的是添加一些统计数据。我对散列不匹配非常满意,但我需要找出有多少已上载到UserArtists表的Artister_id未出现在out 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 CDBC标准。我会感激你的帮助


编辑:除了获取此信息以进行统计外,我可能还可以使用CDbCommand执行此操作,我需要能够删除所有艺术家id无效的记录,为此,我需要某种方法来执行自定义查询。

此SQL查询应足以删除UserArtists中的记录,其中在艺术家中未找到匹配项:

DELETE FROM UserArtists
WHERE artists_id NOT IN (SELECT artists_id FROM Artists)
这将返回您想要的号码:

SELECT COUNT(*) FROM UserArtists
您可以这样做:

$sql='从UserArtists中删除 艺术家id不在“从艺术家中选择艺术家id”中的位置; $numberOfEffectedRows=Yii::app->db->createCommand$sql->exectue; $numberOfValidItems=UserArtists::model->count;