我的Yii 1.1
网站有点问题。
我有两张桌子,UserArtists
和Artists
. UserArtists
通过文件上传,包含两个字段(hash, artist_id)
其中hash
是用户哈希,artist_id
是艺术家表的id
。 Artists
包含艺术家信息。
填充UserArtists
的文件是从外部源生成的,artist_id
的hash
都与我们的表不匹配,因此它包含实际数据中不存在的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();