2016-05-20 2 views
1

У меня есть эти две таблицы:Как проверить другую таблицу перед обновлением?

// users 
+----+-------+-----------------------+--------+ 
| id | name |  email   | active | 
+----+-------+-----------------------+--------+ 
| 1 | peter | [email protected] | NULL | 
| 2 | jack | [email protected] | NULL | 
| 3 | john | [email protected] | NULL | 
+----+-------+-----------------------+--------+ 

// activate 
+----+---------+---------------------+ 
| id | post_id | random_string  | 
+----+---------+---------------------+ 
| 1 | 2  | fewklw23523kf  | 
+----+---------+---------------------+ 

Также у меня есть URL, как это:

http://example.com/activate.php?str=fewklw23523kf 

Все, что я пытаюсь сделать:

  • Сравнение GET['str'] с random_string столбец от activate стол
  • Проверка active столбец для NULL где id = post_id.

И затем (если есть соответствует строке) устанавливают 1active столбца из таблицы users. Как я могу это сделать?


$str = $_GET['str']; 

$stm = $db_con->prepare("UPDATE users SET active = 1 
          WHERE (SELECT 1 FROM activate WHERE random_string = ?) t AND 
           (SELECT 1 FROM users WHERE t.post_id = id AND 
                  active IS NULL) "); 

$stmt->execute(array($str)); 

Мой запрос не работает, как ожидалось.

ответ

1

Вы можете использовать присоединиться

UPDATE users 
INNER JOIN activate on activate.post_id = user.id 
SET active = 1   
WHERE activate.random_string = ? 
AND user.active IS NULL; 
+0

Спасибо upvote – stack

+0

Как совет, можете ли вы, пожалуйста, сказать, что мой алгоритм правильный? * (для активации новой учетной записи) * – stack

+1

Если я понимаю, что вы используете случайную сгенерированную строку, отправляемую по почте для пользователя, поэтому, когда пользователь нажимает на ссылку, которую вы отправляете, вы получаете это значение для включения соответствующего пользователя, если он не включен. логика правильная .. – scaisEdge

1

я считаю, что это один будет делать трюк

UPDATE users, activate SET active = 1 
WHERE users.id = post_id and active is null and random_string=? 
+0

Спасибо upvote – stack

1

попытку изменить

(SELECT 1 FROM users WHERE t.post_id = id AND active IS NULL) 

этому

(SELECT 1 FROM users, activate as t WHERE t.post_id = id AND active IS NULL) 
+0

Спасибо upvote – stack

Смежные вопросы