首页 > 解决方案 > 使 (user_id&music_id) 在 Likes 表和 Dislikes 表中唯一

问题描述

我在 mysql 中有 2 个基表:

  1. 用户

  2. 音乐

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

  1. 用户身份

  2. 音乐ID

现在我想在这 2 个表中插入唯一的项目。例如,如果用户 1 喜欢音乐 1.dislikes 表拒绝用户 1 和音乐 1。

有什么SQL方法吗?

标签: mysqlsql

解决方案


您必须重新设计您的数据库并合并likesdislikes表并创建用于评级的布尔列

或者

您不能重新设计数据库您可以使用后端语言进行检查table 1,检查后插入到table 2

或 SQL 方式

使用插入选择

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

使用触发器

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

推荐阅读