2011-04-17 192 views
0

我有一個名爲「users」的MySQL表具有「firstname」和「surname」列。桌子上有上千行左右。具有相同表值的MySQL更新

我現在已經添加了另一個名爲「search」的列,我想用它填充由空格分隔的名字和姓氏的值。例如,如果firstname = Bob和surname = smith,我想用「Bob Smith」填充「搜索」。

任何人都可以建議更新聲明,選擇這些值並將它們插入到新列?

最好的問候,本。

+1

嗨,本,我會建議這樣做一個簡單的PHP腳本。但我想知道如果你想要搜索字段,所以你可以查詢名字和姓氏,如果沒有必要將它們結合起來。 – Michael 2011-04-17 16:02:33

+0

如果你有兩個屬性:「名字」和「姓氏」那麼你肯定不需要另外一個列?這不僅僅是數據冗餘嗎?有人請糾正我,如果我錯了。 – ale 2011-04-17 16:03:47

+2

你不需要它,但你可以打開該列的全文索引並將其用作搜索關鍵字。您的查詢變得很容易,因爲您可以使用WHERE關鍵字(例如'%Ryan%'而不是WHERE firstname ='Ryan'或lastname ='Ryan'),並且向關鍵字搜索添加更多字段您的查詢不會增長 – taylonr 2011-04-17 16:06:26

回答

4

你可以簡單地使用...

UPDATE users SET search=TRIM(CONCAT(firstname, ' ', surname)); 

作爲解釋,CONCAT只需連接(合併)提供的字段/值和TRIM將刪除任何前導空格或尾隨空格,從而確保如果名字/姓氏或實際上都缺失,則不存在問題。有關這些功能的更多信息,請參閱MySQL String Functions manual page

但是,我很想調用新的列「名稱」(或者確實是「full_name」)而不是「搜索」,因爲這最多隻是一個有點誤導性的字段名稱。

+0

完美!非常感謝,那正是我想要做的。 問候,本。 – Ben 2011-04-17 16:08:45

+0

@Ben沒問題。希望它進展順利。 :-) – 2011-04-17 16:10:51

0
update users 
set search = CONCAT(firstname, ' ', surname) 

該腳本將更新它。

我不確定關於MySql,但Sql Server允許您將字段設置爲計算列。您可以將計算方式指定爲「ISNULL(FirstName, ' ') + ' ' + ISNULL(Surname, ' ')」並將其設置爲保持不變,以便每次都不計算。在這種情況下,你不會需要更新腳本

0
update `users` set `search` = CONCAT(`firstname`, ' ', `surname`); 
+0

@middaparka nm :) – Nishant 2011-04-17 16:14:59

相關問題