2011-05-25 60 views
1

好吧,這是一個容易的問題:MySQL編輯值

我在MySQL中有一個表,我保留一些國家名稱(由用戶插入)。 「問題」是一些用戶插入的國家名稱沒有第一個大寫字母。

需要一個腳本(查詢+ PHP),該腳本從表格中的1列中選擇所有值,並應用PHP腳本,使每個單詞的第一個字母爲大寫字母,其餘爲小寫字母。

例子: 前編輯:

Name oNe 
cOUNTRY 
VaLue 
value 

編輯後:

Name One 
Country 
Value 
Value 

我想知道兩件事情: - >編輯MySQL表 內的值最簡單的辦法 - >最簡單的PHP方式來利用腳本內每個單詞的首字母(空格分隔)

謝謝!

回答

3

您可以使用this功能:

DELIMITER $$ 

DROP FUNCTION IF EXISTS `ICap`$$ 

CREATE FUNCTION `ICap`(mystring varchar(1000)) 
    RETURNS VARCHAR(1000) 
BEGIN 

DECLARE i INT DEFAULT 1; 
DECLARE myc, pc CHAR(1); 
DECLARE myoutstring VARCHAR(1000) DEFAULT LOWER(mystring); 

WHILE i <= CHAR_LENGTH(mystring) DO 
    SET myc = SUBSTRING(mystring, i, 1); 
    SET pc = CASE WHEN i = 1 THEN ' ' ELSE SUBSTRING(mystring, i - 1, 1) END; 
    IF pc IN (' ', '&', '''', '_', '?', ';', ':', '!', ',', '-', '/', '(', '.') THEN 
     SET myoutstring = INSERT(myoutstring, i, 1, UPPER(myc)); 
    END IF; 
    SET i = i + 1; 
END WHILE; 

RETURN myoutstring; 

END$$ 

DELIMITER ; 

之後,你可以檢索的結果是這樣的:

SELECT 
    ICap(name) 
FROM 
    MyTable 

或剛剛更新的所有行:在數據庫

UPDATE 
    MyTable 
SET 
    name = ICap(name) 
+0

這實際上是PHP嗎? – Midas 2011-05-25 11:41:34

+0

@Midas:不,它只是MySQL。你不需要php來滿足你的需求。您只能在MySQL中完成此操作。 – CristiC 2011-05-25 11:43:45

+0

它像一個魅力工作,謝謝! – Cristy 2011-05-25 11:45:48

1

- >編輯MySQL表中的值,最簡單的方法

UPDATE TABLE SET COL="NEW VALUE" where COL="OLD VALUE"; 

小心,它將替換所有行wher COL等於舊值

- >最簡單的PHP的方式來利用每一個字(用空格隔開)的腳本

內的第一個字母有該功能:http://php.net/manual/en/function.ucwords.php

3

要解決只有一個SQL語句的數據庫使用:

UPDATE country_table SET country_name = CONCAT(UCASE(MID(country_name,1,1)),MID(LOWER(country_name),2)); 

這將大寫每個國家的名字的第一個字母小寫和休息。所有這些都不需要任何PHP。

+0

這隻能使用名稱的第一個字母,而不是每個首字母,但是謝謝! – Cristy 2011-05-25 11:43:57

0

你可以做到這一切在MySQL中,如果你想:

SELECT CONCAT(UPPER(SUBSTRING(CountryName, 1, 1)), LOWER(SUBSTRING(CountryName FROM 2))) from countries AS properCountryname; 

的結果集返回將與大寫的第一個字母的國家或地區名稱字段。

如果你願意,你甚至可以在一個sql查詢中進行更新。

如果你真的 PHP做的工作,是這樣的:

<?php 
set_time_limit(0); 
$cnt=0; 
$con=mysql_connect('localhost','root',''); 
mysql_select_db('fakeDB',$con); 
$query="SELECT `name`,id FROM countries"; 
$result=mysql_query($query); 

while ($row=mysql_fetch_array($result)) 
{ 
    $name= $row["name"]; 
    $key = $row["id"]; 
    $field = strtolower($name); 
    $array=explode(" ",$name); 

    for ($i=0;$i<count($array);$i++) 
    { 
    $array[$i] = ucfirst($array[$i]); 
    } 
    $field = implode(" ",$array); 
    $query2 = "UPDATE countries SET `name`='$name' where id=$key"; 
    mysql_query($query2); 
    $cnt++; 
    } 
    echo $cnt." Records updated"; 
?> 

只是一個快速的未經檢驗的thingie,但它應該給你一個想法。