在Codeigniter ActiveRecord查询中使用IFNULL和CONCAT

时间:2013-10-24 14:02:43

标签: php mysql codeigniter

我正在使用Codeigniter ActiveRecord ORM进行查询,从我的数据库中选择一些数据。我的数据库表中的一个数据位来自名为updated_by的列,该列由users表中的一个整数表示,该表告诉哪个用户更新了该特定记录。此整数当前是一个int(11),在创建初始记录时默认为NULL,并且该列的值显然可以为NULL。

运行查询时,我没有获得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 个答案:

答案 0 :(得分:1)

问题基本上是CONCAT_WS()永远不会返回NULL,你可以运行查询

SELECT CONCAT_WS(' ',NULL,NULL);

并且它将始终返回空白空间,因此如果没有updater.firstname或updater.last_name,它将返回空格而不是您期望得到的NULL值。

您可以通过将IFNULL更改为简单的IF来实现此目的

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