如何修改表中所有行的属性?

时间:2010-04-07 00:31:59

标签: php mysql database algorithm

我对提出这样一个新手问题表示歉意但是,我需要帮助使用PHP或直接在MySQL中构建脚本,可以执行以下操作:

  1. 获取表格中的列值(文本)
  2. 将它们改为大写词(从“这是一个标题”到“这是一个标题”)
  3. 将旧值(未大写)替换为新值(大写)。

4 个答案:

答案 0 :(得分:4)

  1. MySQL没有像Oracle的initcap这样的功能 - 你必须create the function yourself

    DELIMITER $$
    DROP FUNCTION IF EXISTS `test`.`initcap`$$
    
    CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8
    BEGIN
    
      SET @str='';
      SET @l_str='';
    
      WHILE x REGEXP ' ' DO
        SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str;
        SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x;
        SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str;
      END WHILE;
    
      RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2)))));
    
    END$$
    
    DELIMITER ;
    

    请注意参数上的文本长度与最长的文本字段一样长。

  2. 使用UPDATE statement

    UPDATE TABLE 
       SET text_column = initcap(text_column)
    

答案 1 :(得分:3)

这不是MySQL本机的功能,因此使用PHP的ucwords可能会节省一些时间。

注意:这会为您表格中的每一行运行一次UPDATE查询。

<?php

  $r = mysql_query("SELECT id, name FROM users");
  while($u = mysql_fetch_object($r)){
    $r2 = mysql_query("UPDATE users SET name=".ucwords($u->name)." WHERE id={$u=>id}");
  }

?>

答案 2 :(得分:1)

使用SQL选择您的行:

SELECT <string> FROM <table> [WHERE <field> = <whatever>]

使用PHP的ucwords()函数更新字符串:

$UpperCaseString = ucwords($lowercase);

更新每条记录:

UPDATE <table> SET <fieldname> = <UpperCaseString> WHERE id=<id>

答案 3 :(得分:0)

您要做的是获取所有值,并为每个值运行PHP函数ucwords。代码示例即将推出......

编辑:@smotchkkiss打败了我 - 使用他的代码: - )