使用CodeIgniter更新批处理

lud*_*vic 9 php mysql codeigniter categories

我正在尝试用CodeIgniter做一个小型的开放式CMS,我现在正在开发类别系统.

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

我有2个mySQL表

  • #1:ft_categories(列出所有类别的名称,包含2个字段:category_name和id)
  • #2:ft_upload_data(列出所有包含id,title,category,date等字段的帖子)

我想用编辑类别名称表单中的数据更新我的#1 TABLE(此表单在循环中填充输入以一次编辑多个类别)

这里是 :

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'; }
Run Code Online (Sandbox Code Playgroud)

这是从DB中检索输入的表单,您可以在其中编辑名称.

好了,现在编辑类别名称时,您可以转到"update_categories"CONTROLLER来执行UPDATE请求

    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);

}
Run Code Online (Sandbox Code Playgroud)

这将获得多个输入字段以更新DB.现在我转到MODEL来更新数据库中的数据和这里的问题:

    function update_categories($data) {

    ?
Run Code Online (Sandbox Code Playgroud)

我不知道如何正确地使用insert_batch但使用UPDATE更新名称,因为虽然我需要更新TABLE#1,但我还需要在表#2 Double UPDATE中更新字段中的名称在表#1中的2个表和1个批次更新中

显然,我尝试再添加一个TABLE:TABLE#3获取TABLE#1字段id并将其与TABLE#2字段id匹配,但我无法弄明白在3个表之间建立连接.

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


谢谢你的回答!

好的,我现在有第三个表我想检索'category_name'以在'post'中显示

我有这个 :

    $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();
Run Code Online (Sandbox Code Playgroud)

但它说'on子句'中有未知列'assigned_categories.ft_categories_id'

(assigned_categories是我的第三个表,其中包含帖子ID和类别ID)

任何的想法?

Kan*_*iya 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'); 
Run Code Online (Sandbox Code Playgroud)

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

希望这有帮助........................

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')
Run Code Online (Sandbox Code Playgroud)

  • 如何添加多个条件?`$ this-> db-> where()`适用于update_batch吗? (3认同)

Jar*_*zyk -2

首先,您无法在一个查询中更新多行,因此没有像 insert_batch() 这样的更新方法 - 您必须在每一行的循环中执行此操作。接下来,您应该使用第三个表使用外键(InnoDB,性能更差)以一对多关系将帖子ID与类别ID链接起来,或者至少使用TABLE#2中链接到类别ID的category_id字段,这样您就不需要如果 TABLE#1 发生更改,则需要更新此表。