2011-06-07 93 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