2011-04-17 130 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