我有一個名爲「配置文件」的表。這個表中有一個名爲「user_id」的列,我將其名稱更改爲「用戶名」,並將類型從INT(11)更改爲Varchar(255)。但是這個列的內容仍然是數字ID。如何根據它與另一個表的關係來更新表列?
這些ID對應於另一個稱爲「用戶」的表。該表具有名爲「user_id」和「用戶名」的字段。對於「個人資料」表上的每一行,我需要首先檢查用戶名字段對id的查詢,然後查看用戶表以獲取與該id對應的用戶名,然後更新配置文件表的用戶名值用正確的用戶名。
概況表:
username | blah blah...
------------------------
1 | ...
用戶表:
user_id | username
------------------------
1 | Joe
我需要被更新爲 「喬」 爲上的配置文件表中的用戶名字段中的值。
我想出了這個PHP腳本,但是,由於某種原因,只更新4條記錄後停止工作:
$sql = 'SELECT username FROM profiles';
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
$id = $row['username'];
$sql = 'SELECT username FROM users WHERE user_id = '. $id;
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
$sql = "UPDATE profiles SET username = '".$row['username']."' WHERE username = $id";
$query = mysql_query($sql);
if(!$query) {
echo 'error!';
}
}
}
我的劇本是不是所有的效率,首先,雖然這不是什麼大問題因爲表格只有5萬條記錄。無論如何,將直接從MySQL做到這一點的方法是什麼?
我的問題是你爲什麼要這樣做?你正在從一個結構良好的規範化模式轉移到可能更難以處理並導致問題的事情上。 – liquorvicar 2012-04-12 06:12:27
@livvvicar是的,我決定不。我的首要原因是根據用戶名選擇用戶,讓url看起來像mysite.com/profile?user=Bob,而不是用id而不是Bob。但我沒有考慮這樣一個事實,即通過數字標識和varchar內容進行選擇會更快,id永遠不變,等等。現在,我將如此類似:mysite.com/profile?user=Bob&id=123,這樣姓名和身份證都在那裏,但我只是通過id選擇名稱並在那裏出於美學/可用性的原因。 – TK123 2012-04-12 21:06:02