2013-02-08 8 views
0

У меня есть две таблицы в mysql, которые являются «пользователями» и «users_info» - первая содержит данные для входа, такие как адрес электронной почты и пароль, а также имя.обновление на нескольких таблицах

и второй таблицы, которая содержит больше информации, как адрес, DOB, био и т.д.

Сейчас я работаю на панели администратора, в которой я могу изменить любую информацию, касающуюся этих пользователей. Чтобы получить данные, я использую объединение, но как насчет сохранения?

Как сохранить данные независимо от их таблицы? если бы это был только один стол, я сделал бы (в PHP):

$values = Array(
    "email" => "[email protected]", //this goes into "users" 
    "name" => "john", //this one, too 
    "bio" => "i is cool" //this one should to go users_info!! 
); 

foreach($values as $k=>$v) { 
    $query = " UPDATE users SET '$k'='$v' WHERE id=7653 "; 
} 

это даст ошибку, так как «био» не является столбцом внутри users_info. Есть идеи?

Заранее спасибо.

ответ

0
$table = "users"; 
foreach($values as $k=>$v) { 
if($values = "bio"{ 
$table = "users_info"; 
} 
$query = "UPDATE '$table' set '$k'='$v' WHERE id = 7653"; 
$table = "users"; 
} 
+0

фактически забыл упомянуть. Я знаю, что могу это сделать, но есть ли способ сделать это только в одном запросе? –

+0

$ table = "users"; foreach ($ values ​​as $ k => $ v) { if ($ values ​​= "bio" { $ table = "users_info"; } $ query = "UPDATE '$ table' set '$ k' = '$ v' WHERE id = 7653 "; $ table =" users "; } –

1

Вы способ кодирования является немного расплывчатым, хотя вы можете попробовать сделать, как показано ниже на данный момент,

$usersColumns = array('email','password',...); 
$usersInfoColumns = array('address','dob',...); 
foreach($values as $k=>$v) { 
    if(in_array($k,$usersColumns)){ 
    $tableName = 'users'; 
    } 
    else if(in_array($k,$usersInfoColumns)){ 
    $tableName = 'users_info';  
    } 
    $query = "UPDATE $tableName SET '$k'='$v' WHERE id=7653"; 
} 
0

Вы, конечно, можете использовать multiple-table syntax:

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 

Однако, если бы я был вами, мне было бы все равно, и я просто запустил два регулярные обновления одной таблицы. Было бы легко сделать ошибку (и обновить непреднамеренные записи), и вы не получите какой-либо заметной выгоды.

0

Я никогда не рекомендую запросы, которые находятся внутри цикла. Я думаю, вам нужно сначала отделить свои значения от должности;

<form method="post"> 
    <input type="text" name="user[name]"> 
    <input type="text" name="user[email]"> 
    <textarea name="user_info[bio]"></textarea> 
</form> 

И часть PHP;

$user_post  = (array) $_POST['user']; 
$user_info_post = (array) $_POST['user_info']; 
$user_query = $user_info_query = array(); 
foreach ($user_post as $k => $v) { 
    // db_escape is your data security 
    $user_query[] = sprintf("`%s` = '%s'", $k, db_escape($v)); 
} 
if (!empty($user_query)) { 
    $user_query = join(', ', $user_query); 
    // db_query("UPDATE users SET ..."); 
} 
if (!empty($user_info_query)) { 
    $user_info_query = join(', ', $user_info_query); 
    // db_query("UPDATE users_info SET ..."); 
} 
Смежные вопросы