2010-04-07 5 views
1

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

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

ответ

4
  1. MySQL не имеет функции, как initcap Oracle, - вы должны 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) 
    
+0

@prgmatic, преимущество решения @OMG Ponies заключается в том, что если вам когда-нибудь понадобится функция '' initcap() '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

+0

@OMG Ponies, вы должны, вероятно, ссылаться на источники при копировании чужих работ. http://dev.mysql.com/doc/refman/5.1/en/string-functions.html –

+0

@smotchkkiss: Я сделал - я связался с более кратким блогом, где говорится: «Создайте функцию самостоятельно» –

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}"); 
    } 

?> 
+0

+1: Для наименьшего кодирования воздействия, но это потенциально очень много данных для передачи по проводам, капитализировать надлежащим образом, а затем отправить обратно. –

0

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

EDIT: @smotchkkiss бить меня к нему - использовать свой код :-)

1

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

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

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

$UpperCaseString = ucwords($lowercase);

Обновление каждая запись:

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

+0

Спасибо @keithjgrant, это полезно. – nkha

Смежные вопросы