2016-05-02 13 views
3

I持っている3つのテーブル:挿入する前に2つの条件を確認するにはどうすればよいですか?

// Posts 
+----+----------+---------------+-----------+ 
| id | title | content | id_author | 
+----+----------+---------------+-----------+ 
| 1 | title1 | content1  | 1234  | 
| 2 | title2 | content2  | 5678  | 
+----+----------+---------------+-----------+ 

// Users 
+----+--------+--------+ 
| id | name | active | 
+----+--------+--------+ 
| 1 | jack | 1  | 
| 2 | peter | 0  | 
| 3 | John | 1  | 
+----+--------+--------+ 

// Votes 
+----+---------+---------+ 
| id | id_post | id_user | 
+----+---------+---------+ 
| 1 | 32  | 1234 | 
| 2 | 634  | 5678 | 
| 3 | 352  | 1234 | 
+----+---------+---------+ 

今、私はVotesテーブルに新しい投票を挿入する前に2つの条件をチェックする必要があります。

  1. 作者のidと同じものを、私は合格していますか。 Posts.id_user = :author(私はFKによってそれを行うことができると知っていますが、私は欲しくないです)
  2. 現在のユーザーのアカウントがアクティブになっていますか?

    INSERT INTO Votes (id_post,id_user) 
    SELECT ?,? 
    FROM Posts p 
    WHERE p.id_user = :author limit 1; 
    

    がどのように私は、クエリに2つ目の条件Users.active = 1を追加することができます。Users.active = 1

はまた、ここに私のクエリですか?


EDIT:は実際に私は人々がactive = 0アクティブでは誰に投票することはできせてはいけないしようとしています。たとえば、SOが男性を禁止している場合、私は(現在のユーザー)禁止されているので、私はもう投稿できません。だから私は確信している$_SESSION['id']は、クエリで使用する必要があります。

答えて

1
INSERT INTO Votes (id_post,id_user) 
SELECT p.id,u.id 
FROM Posts p, Users u 
WHERE p.id_user = :author 
AND u.id = :user 
AND u.active = 1 limit 1; 

次に、パラメータuserを現在のユーザーIDと同じに設定します。

EDIT:私はテーブルVotesid_userは、ポストの投票者のIDではなく、作者(?修正)でなければならないので、私はJOINを排除するクエリを固定とします。

+0

と、私は**現在のユーザー**がアクティブであるかどうかをチェックしようとしています。ですから、私は '$ _SESSION ['id']'をクエリに使わなければならないと思います。 – stack

+0

私はその質問を編集しました。 'author'は投稿者、' user'は現在の投票者です。 –

0

使用してルックどこ

INSERT INTO Votes (id_post,id_user) 
SELECT ?,? 
FROM Posts p, Users u 
WHERE p.id_user = :author and u.active = 1 limit 1; 
0
INSERT INTO Votes (id_post,id_user) 
SELECT p.id, u.id 
FROM Posts p 
    INNER JOIN Users u ON 1 = 1 
WHERE p.id_user = :author 
    AND u.id = :current_user_id 
    AND u.active = 1 
LIMIT 1; 
関連する問題