我在mysql中有2个基本表:
用户
音乐
我喜欢和不喜欢带有2个字段的表:
user_id
music_id
现在我只想在此2个表中插入唯一项。例如,如果用户1喜欢音乐1,则不喜欢表拒绝用户1和音乐1。
有什么SQL方式吗?
答案 0 :(得分:0)
您必须重新设计数据库,并合并likes
和dislikes
表并创建bool列以进行评分
OR
您无法重新设计数据库,可以先使用后端语言进行检查table 1
,然后再将检查插入table 2
OR SQL方式
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)
和在存储新的喜欢/不喜欢之前检查用户喜欢/不喜欢