2016-10-19 19 views
1

MySQLテーブルに新しいレコードを挿入したいのですが、同じuser_idを持つレコードがない場合にのみ挿入してください。私は新しいレコードが挿入されたかどうかを示す返されたブール値を取得したい。すでに同じ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」「偽の」/戻る/または同じ意味を持つ他の何か必要があります。 しかし、このクエリINSERT INTO blog_post_likes (post_id, user_id) VALUES (3, 34)は、新しいレコードが挿入されたため、同じbeaningを持つ '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のように、ユーザーはこのようにforeach投稿を1つだけ作成することができます。それ以外はユニークにする必要はありませんが、ユーザーは同じ投稿に対してmulptipleが好きなようにすることができます。 .. – CodeL

0

両方の列を主キーとして定義する必要があります。そうすれば、同じレコードを挿入すると、MySQLは「重複エントリ」エラーを返さなければなりません。ここで参照されるようにあなたは、エラーコード1062をチェックする必要があります:あなたはユニークになりたいの列にUNIQUE制約を作成する必要が

https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

0

あなたはデータを挿入する前に、使用

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

このクエリの実行は、ユーザーが既にその記事を気に入っていたことを意味し、行を返す場合。したがって、挿入クエリを実行しないでください。

行が返されない場合は、挿入クエリを実行します。

mysqli_num_rows()を使用して、返される行数を見つけることができます。

関連する問題