2012-04-30 115 views
4

我有这个page见下表删除号码前缀,我想从template_id的列中删除的“”编号的前缀,MySQL的:从所有记录

page_id template_id url 
1   9991   a 
2   9992   b 
3   9993   c 
4   4    d 

这样我就可以得到更新下面的数据,

page_id template_id url 
1   1    a 
2   2    b 
3   3    c 
4   4    d 

任何想法如何删除这种类型的前缀?

+0

这是integer'的'类型。 – laukok

回答

2

如果你不想做一个复杂的查询,或者如果你需要futher操作,你可以这样做:

while($r = mysql_fetch_assoc($q)) { 
    $newTemplateID = (string) $r['template_id']; 
    if (substr($newTemplateID,0,3) === 999) { 
    $newTemplateID = substr($newTemplateID,3); 

    mysql_query("UPDATE tbl 
        SET template_id = {$newTemplateID} 
        WHERE page_id = {$r['page_id']} 
        LIMIT 1"); 
    } 
} 
+0

感谢。我正在研究这个,但你比我快! :-) – laukok

+0

@lauthiamkok:感谢:)考虑给予+1并接受,如果这有助于你:) – dynamic

5

来获取数据,如图你的问题:

SELECT 
    page_id, 
    SUBSTRING(template_id, IF(template_id RLIKE '^999', 4, 1)) AS template_id, 
    url 
FROM page 

或者,如果你想永久更新表格:

UPDATE page 
SET template_id = SUBSTRING(template_id, 4) 
WHERE template_id RLIKE '^999' 

MySQL的implicit type conversion将处理其余的。

+0

感谢这个答案。 – laukok

+0

可使用的字符串操作上的整数列在MySQL?我不确定。 – dqhendricks

+0

@dqhendricks:见我的答案的链接:他们将自动获得转换为字符串(在连接的字符集为5.5.3,或'binary'在此之前,无论哪种方式,我相信'SUBSTRING'和'RLIKE '^ 999'应该可以正常工作)。 – eggyal