2012-02-02 51 views
0

我有一个joomla数据库'jos_content'表包含有关文章的详细信息。mysql查询文本替换问题

在该表中,列“attribs”是TEXT数据类型,其中包含数据有关的文章属性,像:

show_pdf_icon=0 
show_print_icon=0 
show_email_icon=0 

我想修改属性“show_print_icon”,使其具有如图1所示,这样的:

show_pdf_icon=0 
show_print_icon=1 
show_email_icon=0 

对于这一点,我已书写的查询,它取代了 'show_print_icon = 0' 在列 'show_print_icon = 1'。

UPDATE jos_content set attribs=replace("attribs", "%print_icon=0\nshow_email%", 
"%print_icon=1\nshow_email%") where attribs like '%print_icon=0\nshow_email%'; 

出于某种原因,执行此查询后,我得到列值为空。 我无法理解我出错的地方。查询有什么问题?

回答

0

检查换行符。它可能不是\ n,它可能也是\ r \ n或者\ r,所以你不能可靠地匹配这条规则。

另外,为什么你需要文字surroundig?它只会让你的登录更加复杂。例如,您必须确保保持一致的数据,并且不要以其他顺序存在变量。

我不知道你的数据库结构是什么,但是试着去匹配你需要改变的东西。如果现在是不可能的,不是试图改变你的逻辑,所以你有可能

1

一种方法是:

$sql = "Select attribs from jos_content"; 
$db = JFactory::getDBO(): 
$db->setQuery($sql): 
$contents = $db->loadObjectList(); 

foreach($contents as $content){ 
    $attribs = $content->attribs; 
    $attribs = explode("\n", $attribs); 
    if(!$attribs['show_print_icon']){ 
     $attribs['show_print_icon'] = 1; 
     $content->attribs = implode("\n", $attribs); 
    // run the update query here for each content 
    }  
} 

我会让你知道的其他方式,在使用Com内容模型