使(user_id&music_id)在Likes表和Dislikes表中唯一

时间:2019-06-21 15:39:00

标签: mysql sql

我在mysql中有2个基本表:

  1. 用户

  2. 音乐

我喜欢和不喜欢带有2个字段的表:

  1. user_id

  2. music_id

现在我只想在此2个表中插入唯一项。例如,如果用户1喜欢音乐1,则不喜欢表拒绝用户1和音乐1。

有什么SQL方式吗?

2 个答案:

答案 0 :(得分:0)

您必须重新设计数据库,并合并likesdislikes表并创建bool列以进行评分

OR

您无法重新设计数据库,可以先使用后端语言进行检查table 1,然后再将检查插入table 2

OR SQL方式

使用INSERT SELECT

INSERT INTO likes (`music_id`,`user_id`)
SELECT 1, 2
FROM dislikes
WHERE (user_id <> 2 AND  music_id <> 1) 
LIMIT 1

使用TRIGGERS

DROP TRIGGER IF EXISTS `dislike_check`;CREATE DEFINER=`root`@`localhost` TRIGGER `dislike_check` BEFORE INSERT ON `likes` FOR EACH ROW BEGIN
    DECLARE dummy integer default 0; 

    SELECT 1 INTO dummy
    FROM dislike
    WHERE (user_id = NEW.user_id AND  music_id = NEW.music_id);

    IF (dummy = 1) THEN 
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Any Message'; 
    END IF; 
    END

答案 1 :(得分:0)

我创建了一个这样的表:

music_rate
    - user_id
    -  music_id
    - like(boolean : 1 means like and 0 means dislike)

在存储新的喜欢/不喜欢之前检查用户喜欢/不喜欢