Php 在Codeigniter ActiveRecord查询中使用带有CONCAT的IFNULL
我正在使用Codeigniter ActiveRecord ORM执行一个查询,该查询将从我的数据库中选择一些数据。我的数据库表中的一个数据位来自名为updated_的列,该列由users表中的一个整数表示,该整数表示哪个用户更新了该特定记录。该整数当前是一个int(11),在创建初始记录时默认为NULL,并且该列的值显然可以为NULL 当运行查询时,我不会获取更新的_by字段的值。我做错什么了吗Php 在Codeigniter ActiveRecord查询中使用带有CONCAT的IFNULL,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在使用Codeigniter ActiveRecord ORM执行一个查询,该查询将从我的数据库中选择一些数据。我的数据库表中的一个数据位来自名为updated_的列,该列由users表中的一个整数表示,该整数表示哪个用户更新了该特定记录。该整数当前是一个int(11),在创建初始记录时默认为NULL,并且该列的值显然可以为NULL 当运行查询时,我不会获取更新的_by字段的值。我做错什么了吗 $this->db->select("IFNULL(CONCAT_WS(' ', up
$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`
问题基本上是CONCAT_WS()永远不会返回NULL,您可以运行查询
SELECT CONCAT_WS(' ',NULL,NULL);
它将始终返回一个空格,因此,如果没有updater.firstname或updater.last_name,它将返回一个空格,而不是期望得到的空值
可以通过将IFNULL更改为简单的IF来实现这一点
IF(updator.firstname IS NULL, '----', CONCAT_WS(' ', updator.first_name, updator.last_name))
echo$this->db->last_query()
并查看生成的查询。@Nil'z您有发布此评论的宏吗?:不要误会,我认为这是个好主意。我已经更新了我的问题,包括回音查询。没有那样的,只是不喜欢复杂性第一手。PatrickManser@user2576961您是否在phpmyadmin/控制台中运行此查询来测试它?