【发布时间】:2014-10-24 15:36:02
【问题描述】:
我有 song 表,其中有 songCategory 和 songName 列。 songCategory 和 songName 的组合在数据库级别设置为唯一。所以基本上即使php尝试插入重复的条目数据库也不会允许。
问题是,项目具有用户可以一次插入一堆歌曲的功能。如您所知,大数据的重复记录检查需要很长时间:对于每首歌曲,我必须查询是否有带有categoryID=x和songName=y的歌曲。所以我需要你的建议来解决这个问题,而不需要额外的重复检查。
我对此没有什么想法,但我不太确定它们是否会起作用:
- 无论如何我们都可以插入记录,如果出现数据库错误,我们只需
continueforeach循环即可。 - 我们可以在每次插入后触发数据库中的一些函数来检查和删除重复的行(我没有自定义mysql函数的经验)
顺便说一句,我正在使用带有 MySQL 数据库的 Yii 框架。
你的建议?
【问题讨论】:
-
insert 不管怎样,你可以检查插入的计数,它会告诉你这首歌是否是重复的。 mysql_affected_rows() 或等效项将告诉您是否实际插入了原始数据或被拒绝,因为它是重复的
-
使用
UNIQUE属性创建一个名为md5_name的字段,添加歌曲时:md5_name=md5($song_cat . $song_name)并添加歌曲并捕获任何Exception或检查last_inserted_id -
如果你使用的是原生 sql 你可以试试
insert ignore但我不认为 yii 的活动记录支持它
标签: php mysql sql database yii