2013-01-18 48 views
2

我有一個表, 城市名稱表(citytable)如何更新MySQL的設置值,其中一些列內容,如其他表列內容

idcity | cityname  | statename | codenumber 
    1 | Los Angeles | state2 |  ... 
    2 | New York  | state3 |  ... 
    3 | New Jersey | state3 |  ... 

代碼編號城表(codetable)

id | city  | codenumber 
    1 | angeles | 031 
    2 | york  | 064 
    3 | jersey | 075 

如何到SET or INSERT or UPDATE data 'codenumber' FROM 'codetable' fields INTO 'codenumber' column FROM citytable WHERE 'city' FROM codetable LIKE '%cityname%' FROM 'citytable'? 感謝您的幫助。

+0

但如何在PHP代碼中使用它? –

+0

我知道如何在PHP中使用常用語法MySQL「UPDATE SET value」。但是我想要的是在專業代碼中嵌套循環PHP代碼時使用它。示例在幾個步驟中創建代碼。第一選擇數據(WHERE語句)然後在第一步中有匹配數據時更新數據。 –

+0

但是有任何結果(codenumber)爲空(當與城市表格一起加入任何沒有區域代碼的城市時)。我想讓循環代碼(PHP)檢查數據(非空),然後更新任何記錄或再次打印它們在循環語句中使組合框中的選項替換輸入文本(html)中的電話號碼(區號)使用Javascript代碼 –

回答

2

使用UPDATE with join

UPDATE cityTable a 
     INNER JOIN codeTable b 
      ON a.ID = b.ID 
SET  a.codeNumber = b.codeNumber 

,但我懷疑這裏IDAUTO_INCREMENT編列,如果是的話,

UPDATE cityTable a 
     INNER JOIN codeTable b 
      ON a.cityName LIKE CONCAT('%', b.city,'%') 
SET  a.codeNumber = b.codeNumber 
+0

感謝我的朋友的幫助,它的工作。 –

+0

不客氣':D' –

+0

嗨,我看你是新來的SO。如果您覺得答案可以解決問題,請通過單擊白色複選標記(*大約15分鐘到1小時後*)將其標記爲「已接受」。這有助於將重點放在仍然沒有答案的舊版SO問題上。 [*如何接受答案工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

0

@JW,我得出了以下的或多或少的同時,卻不得不JW準時的優勢!摩根後

UPDATE citytable a 
INNER JOIN codetable b ON a.cityname LIKE CONCAT('%',b.city,'%') 
SET a.codenumber = b.codenumber 

更新要求在SELECT,然後用更新循環這樣做的PHP的例子。

<?php 
#Fill out the four variables below. 
# 
#This is just an example! 
#If you are going to use this for real, you want to put the top 
#4 variables in a separate file and include that file into this 
#file via phps include directive. That separate file needs 
#to be in a tightly security controlled directory, because 
#your database password is in the file. 
# 
#For security reasons, the variables below must not come from 
#user supplied data (from a POST or GET or the SESSION variables). 
# 
$dbName = ''; 
$hostName = ''; 
$username = ''; 
$password = ''; 


$dbh = new PDO("mysql:dbname=$dbName;host=$hostName", 
    $username, $password); 
$dbh->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION); 
$sqlSelect = " 
    SELECT cityname, codenumber 
    FROM city a 
    INNER JOIN codetable b ON 
     a.cityname LIKE CONCAT('%',b.city,'%');"; 
$sqlUpdate = " 
    UPDATE citytable SET codenumber = ? WHERE cityname = ?"; 
$rows = $dbh->query($sqlSelect)->fetchAll(); 
$sth = $dbh->prepare($sqlUpdate); 
foreach($rows as $row) { 
    $codeNumber = $row['codenumber']; 
    $cityName = $row['cityname']; 
    $sth->execute(array($codeNumber,$cityName)); 

} 
+0

如果涉及的表很大,因爲非最佳連接,它不會表現得非常好。但是,如果您需要一次或偶爾執行此操作,它就會起作用。 – DWright

+0

但是如何在PHP代碼中使用它? –

+0

我已經在上面添加了一個php代碼示例。 – DWright

相關問題