0

我正在使用 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`
4

1 回答 1

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))
于 2013-10-24T20:32:14.330 回答