2013-04-17 2 views
2

У меня есть одна таблица пользователей с именем столбца ID, father_email, mother_email, email_notification и многое другое, теперь я хочу, чтобы обновить столбец email_notification сКак обновить записи с полями с теми же записями, используя один запрос?

father_email, mother_email Я сделал это с несколькими запросами, но я хочу знать, что как сделать это только с одним запросом, чтобы сохранить время выполнения.

мой код следующим образом:

<?php 
    $qry="SELECT id,CONCAT(father_email,',',mother_email) as notify FROM user"; 
    $query=mysql_query($qry); 
    while($row=mysql_fetch_assoc($query)) 
    { 
     $qry2="UPDATE user SET email_notification='".$row['notify']."' WHERE id=".$row['id'].""; 
     mysql_query($qry2); 
    } 
?> 

его работает нормально, но я хочу знать, как сделать это с одним запросом

ответ

3

Это обновит все столбцы email_notification для всех пользователей:

UPDATE user 
SET email_notification = CONCAT_WS(',', father_email, mother_email) 

(я думаю, что лучше использовать CONCAT_WS, который пропустит нулевые значения в папке отца или в mother_email)

+0

да его работает нормально, но, Что разн ч/б CONCAT_WS() и CONCAT() в случае время выполнения? –

+0

@YadavChetan Я думаю, что они очень похожи, может быть, concat_ws может быть немного медленнее, если вы уверены, что у вас нет нулевых значений в father_ruail или в mother_email, вы можете просто использовать 'CONCAT (father_email, ',', mother_email)' – fthiella

+0

oh thats good thanks –

0

Это заменит все из них

UPDATE user AS u 
INNER JOIN user AS ul ON ul.id = u.id 
SET u.email_notification = CONCAT(ul.father_email,',',ul.mother_email) 

UPDATE user 
SET email_notification = CONCAT_WS(',', father_email, mother_email) 
+0

это дает мне ошибку # 1052 - Столбец 'email_notification' в списке полей неоднозначен –

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