2016-10-19 119 views
1

我想插入一個新的記錄到MySQL表中,但只有在沒有記錄具有相同的user_id時才應該插入。除此之外,我想得到一個返回的布爾值,顯示是否插入了新記錄。MySQL INSERT如果記錄不存在

The table 
like_id | user_id | post_id 
1 | 1 | 3 
2 | 5 | 3 
3 | 12 | 5 

例子
這個查詢INSERT INTO blog_post_likes (post_id, user_id) VALUES (3, 1)應該返回「假」 /「0」 /或具有相同含義別的東西,因爲已經有具有相同USER_ID的記錄。 但是這個查詢INSERT INTO blog_post_likes (post_id, user_id) VALUES (3, 34)應該返回'true'/ 1 /或者其他具有相同傾向的東西,因爲插入了新記錄。

我該怎麼做?

回答

1

你必須創建你想成爲唯一列的唯一約束。在這種情況下,我們要提列USER_ID ..

SQL命令:

CREATE TABLE blog_post_likes 
(
post_id INT, 
like_id INT, 
user_id INT NOT NULL UNIQUE, 
) 

當然,你可以改變你現有的表,以避免您的損失表的現有數據。

ALTER TABLE blog_post_likes ADD CONSTRAINT user_id UNIQUE (user_id) 
+0

我不認爲這會工作,因爲用戶可以喜歡不同的職位。你知道我的意思? – KingOfDog

+0

@KingOfDog但是用戶可以只喜歡1個帖子吧?那麼這個選項是正確的,因爲用戶只能喜歡一個帖子。你可以省略like_id,因爲這沒有用。 – Perry

+0

就像@Perry說的那樣,用戶只能以這種方式創建1個類似於foreach的帖子..另外,您不必使其具有唯一性,但用戶可以爲同一帖子製作多個喜歡的視頻..我認爲這是您想要阻止的內容.. – CodeL

0

插入數據之前,使用

SELECT * FROM blog_post_likes WHERE post_id=give_postid AND user_id=give_userid; 

如果該查詢的執行返回的行,這意味着用戶已經很喜歡這個職位。所以不要執行插入查詢。

如果未返回任何行,請執行插入查詢。您可以使用 mysqli_num_rows()查找返回的行數。

相關問題