mysql 使(user_id&music_id)在喜欢表和不喜欢表中唯一

blmhpbnm  于 2023-02-21  发布在  Mysql
关注(0)|答案(2)|浏览(154)

我在MySQL中有两个基表:
1.用户
1.音乐
我有喜欢和不喜欢的表格,其中包含两个字段:
1.用户标识
1.音乐标识符
现在,我想在这两个表中插入一个唯一的项,例如,如果user1喜欢music1,那么Dislikes表不应该允许这个用户向dislike表中添加music1的行。
有没有办法在SQL端实现这种方法?

8ehkhllq

8ehkhllq1#

您必须重新设计数据库,合并likesdislikes表,并为评级创建bool列

你不能重新设计数据库你可以使用后端语言检查第一个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
7z5jn7bk

7z5jn7bk2#

我创建了这样一个表:

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

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

相关问题