mysql:创建一个唯一的索引,以避免在许多条目显示0时出现重复条目

6g8kf2rb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(379)

我使用一个表,评论,存储多个主题,歌曲,艺术家和专辑的评论和评论来自多个用户。我想找到一种方法,以防止重复评论从一个用户对给定的歌曲,艺术家或专辑。当我尝试在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

有人能提出一种方法来创建一个独特的索引,以解决这个问题吗?
谢谢你的建议。

iq0todco

iq0todco1#

mysql没有表达式索引,但可能有一个更简单的解决方案。停止使用0s,而是使用 null s表示不适用的值。 null s是sql数据库的本机方式,表示缺少值,并且不参与索引。

3df52oht

3df52oht2#

使用唯一索引的唯一方法是将所有0更改为null。在大多数情况下,空值被认为是彼此不同的(分组还是分组)。
假设将它们更改为null不会中断大量其他查询,则可以在单个查询中完成:

UPDATE reviews 
SET songid = NULLIF(songid, 0)
  , albumid = NULLIF(albumid, 0)
  , artistid = NULLIF(artistid, 0)
;

相关问题