2011-06-07 120 views
9

我想用CodeIgniter做一个小型的开放CMS,现在我正在处理类别系统。用CodeIgniter更新批处理

我真的坚持这一点,经过多次尝试和论坛后,我没有解决它。

我有2 MySQL表

  • #1:ft_categories(列出所有categorie与2个字段名称: CATEGORY_NAME和id)
  • #2:ft_upload_data(列表中包含的ID字段中的所有帖子,标题,类别, 日期等)

我想更新我的#1表在编辑categorie的名字形式DATAS(这种形式是在一个循环中一次修改多个类别充满输入)

这就是:

if ($result != NULL) { 
echo form_open('admin/update_categories/'); 
if (isset($result) && $result != NULL) { 

    foreach ($result as $row) { 
    echo form_input('category_name[]' ,$row->category_name); 
    echo anchor("admin/delete_category/$row->category_name", 'Delete category'); 
    echo '<br /><br />'; 
    } 

    echo '<br /><br />'; 
    echo form_submit('','Save'); 
    echo form_close(); 

} } else { echo 'NO categories'; } 

这是从数据库中,你可以编辑姓名检索输入的形式。

现在好了,当你编辑categorie的名字你去“update_categories” CONTROLLER做更新请求

function update_categories(){ 

    $i = 0; 
    foreach ($this->input->post('category_name') as $cat) 
     $data[$i++]['category_name'] = $cat; 
     // The $i++ creates a multi-dimensional array to insert 
     // multiple rows into the DB. 

    $this->admin_model->update_categories($data); 

} 

这将获得数倍的输入字段来更新数据库。 现在我去到模型更新数据库中的数据和这里的问题:

function update_categories($data) { 

    ? 

我不知道我能做些什么来的东西,如一个insert_batch但UPDATE正确更新的名称因为虽然我需要更新表#1,我还需要在该领域中的表#更新名称2 2个表双更新,并在表#1

很显然,我试图1个批量更新再添加一个TABLE:TABLE#3,它获取TABLE#1字段ID并将其与TABLE#2字段ID进行匹配,但我无法弄清楚它是否可以在3个表格之间进行连接秒。

任何帮助将非常感激!非常感谢!! (对不起我的英文不好)


感谢您的回答!

好吧,我有这个第三个表,现在我想找回“CATEGORY_NAME”到“后”

中显示此我有这样的:

$this->db->order_by('rank', 'asc'); 

$this->db->select('*'); 
$this->db->from('ft_upload_data'); 
$this->db->join('ft_categories', 'assigned_categories.ft_categories_id = assigned_categories.ft_upload_data_id'); 

$query = $this->db->get(); 



return $query->result(); 

但它说,有未知列“对条款”

在“assigned_categories.ft_categories_id”(assigned_categories是我跟的帖子ID和匹配类ID第三个表)

任何理念?

+0

您忘记tthat你可以做简单的AA'$数据[] ='';' – dynamic 2011-06-11 09:16:12

回答

-3

首先,你不能在一个查询中更新多行,所以没有什么像insert_batch()更新 - 你必须在每一行的循环中做到这一点。接下来,你应该使用第三个表来将post id和category id链接成一对多的关系(InnoDB,性能更差),或者至少使用链接到category id的TABLE#2中的category_id字段,所以你不需要如果TABLE#1发生更改,则需要更新此表。

16

尝试使用UPDATE_BATCH

$this->db->update_batch(); 



$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name 2' , 
     'date' => 'My date 2' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name 2' , 
     'date' => 'Another date 2' 
    ) 
); 

$this->db->update_batch('mytable', $data, 'title'); 

第一个参数将包含表名,第二个是值的关联数组,第三个参数是其中键。

希望这有助于........................

UPDATE 

// Produces: 
// UPDATE `mytable` SET `name` = CASE 
// WHEN `title` = 'My title' THEN 'My Name 2' 
// WHEN `title` = 'Another title' THEN 'Another Name 2' 
// ELSE `name` END, 
// `date` = CASE 
// WHEN `title` = 'My title' THEN 'My date 2' 
// WHEN `title` = 'Another title' THEN 'Another date 2' 
// ELSE `date` END 
// WHERE `title` IN ('My title','Another title') 
+1

如何添加'update_batch'的条件? – 2013-01-15 07:23:40

+0

@SomnathMuluk请参阅我的更新并检查文档.. http://ellislab.com/codeigniter/user-guide/database/active_record.html – 2013-01-15 07:32:24

+2

如何添加多个条件? '$ this-> db-> where()'适用于update_batch吗? – 2013-01-15 07:40:45