2013-02-08 68 views
0

我在mysql中有兩個表是「users」和「users_info」 - 第一個表包含登錄數據,例如電子郵件和密碼以及名稱。在多個表上更新

,幷包含更多的信息,如地址,出生日期,生物第二個表等

現在,我工作的管理面板中,我可以修改關於這些用戶的任何信息。爲了獲得數據,我正在使用一個連接,但保存怎麼辦?

不管表格如何保存數據?如果它只是一個表我會做(在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

居然忘了提。我知道我可以做到這一點,但是,有沒有辦法在一個查詢中做到這一點? – 2013-02-08 13:02:07

+0

$ table =「users」; ($ values =「bio」{table =「users_info」; } $ query =「UPDATE」$ table'set'$ k'= $ foreach($ values as $ k => $ v) '$ v'WHERE id = 7653「; $ table =」users「; } – 2013-02-08 13:08:15

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 ..."); 
}