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

时间:2014-12-28 12:31:10

标签: php yii

我的Yii 1.1网站存在一些问题。

我有两个表,UserArtistsArtistsUserArtists正在通过文件上传,并包含两个字段(hash, artist_id),其中hash是用户哈希,artist_id是艺术家表格的idArtists包含艺术家信息。

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

现在,我需要做的是添加一些统计数据。我对artist_id不匹配完全没问题,但我需要了解上传到我们的hash表中的artist_id个数量中有多少是{&1}}。 t出现在UserArtists表格中。

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

mysql

但我很难将此查询转换为Yii SELECT COUNT(`ua`.*) FROM UserArtists `ua` LEFT OUTER JOIN Artists `a` ON `ua`.`artist_id` = `a`.`id` WHERE `a`.`id` IS NULL 。将不胜感激。

编辑除了获取统计信息的此信息(我可能会使用CDbCriteria),我需要能够删除所有无效CDbCommand的记录,为此,我需要一些方法来进行自定义查询。

1 个答案:

答案 0 :(得分:0)

这个SQL-Query应该足以删除ArtArtists中没有匹配的UserArtists中的记录:

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();