我使用一个表,评论,存储多个主题,歌曲,艺术家和专辑的评论和评论来自多个用户。我想找到一种方法,以防止重复评论从一个用户对给定的歌曲,艺术家或专辑。当我尝试在php中实现这一点时,我希望mysql使用userid和songid上的唯一索引来强制实现唯一性。
但是,我遇到了这样一个问题:对于不适用的字段,条目显示0。例如,如果评论是针对songid的,那么表中显示artistid和albumid为0。
Reviews
reviewid (primary key)|text|songid|albumid|artistid|userid
1|great song|222|0|0|22
2|great album|0|333|0|22
3|great singer|0|0|444|22
//I want to exclude the following entry:
4|lousy song|222|0|0|22
有人能提出一种方法来创建一个独特的索引,以解决这个问题吗?
谢谢你的建议。
2条答案
按热度按时间iq0todco1#
mysql没有表达式索引,但可能有一个更简单的解决方案。停止使用0s,而是使用
null
s表示不适用的值。null
s是sql数据库的本机方式,表示缺少值,并且不参与索引。3df52oht2#
使用唯一索引的唯一方法是将所有0更改为null。在大多数情况下,空值被认为是彼此不同的(分组还是分组)。
假设将它们更改为null不会中断大量其他查询,则可以在单个查询中完成: