2013-10-24 42 views
0

我正在使用Codeigniter ActiveRecord ORM進行查詢,該查詢將從我的數據庫中選擇一些數據。我的數據庫表中的數據位之一來自名爲updated_by的列,該列由users表中的整數表示,它告訴哪個用戶更新了該特定記錄。此整數當前是一個int(11),在創建初始記錄時默認爲NULL,並且該列顯然可以具有NULL值。在Codeigniter ActiveRecord查詢中使用IFNULL和CONCAT

查詢運行時,我沒有得到updated_by字段的值。有什麼我做錯了嗎?

$this->db->select("IFNULL(CONCAT_WS(' ', updator.first_name, updator.last_name), '----') AS updated_by", FALSE); 

對於下面的評論是我的回聲查詢語句。

SELECT `pages`.`page_id`, `pages`.`page_name`, `pages`.`created_at`, `pages`.`updated_at`, `statuses`.`status_name`, CONCAT_WS(' ', creator.first_name, creator.last_name) AS created_by, IFNULL(CONCAT_WS(' ', updator.first_name, updator.last_name), '----') AS updated_by FROM (`pages`) JOIN `users` AS creator ON `creator`.`user_id` = `pages`.`created_by` LEFT JOIN `users` AS updator ON `updator`.`user_id` = `pages`.`updated_by` JOIN `statuses` ON `statuses`.`status_id` = `pages`.`status_id` 
+1

做到這一點'回聲$這個 - > DB-> last_query()',看看生成的查詢。 –

+1

@ Nil'z你有發佈此評論的宏嗎? :D不要誤解我的意思,我認爲這是一個好主意。 –

+0

我已更新我的問題以包含回顯查詢。 – user2576961

回答

1

的問題主要是,CONCAT_WS()不會返回NULL,則可以運行查詢

SELECT CONCAT_WS(' ',NULL,NULL); 

而且它總是會返回一個blankspace,因此如果沒有updater.firstname或更新.last_name它會返回一個空白空間而不是你期望得到的空值。

您可以通過更改您的IFNULL一個簡單的IF

IF(updator.firstname IS NULL, '----', CONCAT_WS(' ', updator.first_name, updator.last_name))