2016-05-02 113 views
3

我有三個表:如何在插入前檢查兩個條件?

// 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表:

  1. 作者的ID和我已經通過是否相同? Posts.id_user = :author(我知道我可以通過FK做到這一點,但我不想)
  2. 當前用戶的帳戶是活動的嗎? Users.active = 1

而且,這裏是我的查詢:

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

如何添加第二個條件Users.active = 1我的查詢?


編輯:其實我試圖不要讓人們能投誰不活動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。

編輯:我想id_userVotes必須是選民的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;