mysql查询文本替换问题

时间:2012-02-02 09:17:50

标签: mysql text joomla

我有一个joomla数据库,其中包含“jos_content”表,其中包含有关文章的详细信息。

在该表中,“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%';

出于某种原因,在执行此查询后,我将列值设为空。 我无法理解我哪里出错了。查询有什么问题?

2 个答案:

答案 0 :(得分: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 Content Model

答案 1 :(得分:0)

检查换行符。它可能不是\ n,它也可能是\ r \ n或只是\ r \ n,因此您无法在此规则上可靠地匹配。

另外,为什么需要文本环境?它只会使您的登录更加复杂。例如,您必须确保保持一致的数据,而不是以其他顺序存在变量。

我不知道那里的数据库结构是什么,但尝试匹配您需要更改的内容。如果现在不可能,那就试着改变你的逻辑,以便让它成为可能