Как изменить атрибут во всех строках таблицы? - PullRequest
1 голос
/ 07 апреля 2010

Приношу свои извинения за задание такого начинающего вопроса, но мне нужна помощь в создании сценария с использованием PHP или непосредственно в MySQL, который может выполнять следующие действия:

  1. Возьмите значения столбца в таблице (текст)
  2. Измените их на заглавные слова (от "это заголовок" до "это заголовок")
  3. Заменить старые значения (некапитализированные) новыми значениями (с большой буквы).

Ответы [ 4 ]

4 голосов
/ 07 апреля 2010
  1. MySQL не имеет функции, подобной Oracle initcap - вам нужно создать функцию самостоятельно :

    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 :

    UPDATE TABLE 
       SET text_column = initcap(text_column)
    
3 голосов
/ 07 апреля 2010

Эта функция не является родной для 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}");
  }

?>
1 голос
/ 07 апреля 2010

Выберите ваши строки с SQL вдоль строк:

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

Обновление строки с использованием PHP-функции ucwords():

$UpperCaseString = ucwords($lowercase);

Обновить каждую запись:

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

0 голосов
/ 07 апреля 2010

Что вам нужно сделать, это получить все значения и для каждого из них запустить функцию PHP ucwords . Пример кода появится в ближайшее время ...

РЕДАКТИРОВАТЬ: @smotchkkiss избили меня до него - используйте его код: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...