2012-04-30 4 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 

Or , если вы хотите, чтобы постоянно обновлять таблицу:

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 или как «двоичный» до этого; в любом случае, я считаю, что «SUBSTRING» и «RLIKE «^ 999'' должен отлично работать). – eggyal

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