用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1989|回复: 8
收起左侧

[版本 3.x] mysql 返回错误的问题

[复制链接]
发表于 2016-11-11 10:23:42 | 显示全部楼层 |阅读模式
有一个数据表 tablename 包含的键值如下
id  charge belongto

其中 controller部分这样写

$data = array('belongto'=>$belongid, "charge IS NOT NULL" => null);
$select_query = $this->user_model->chargesum($data);
if ($select_query)
{
  echo $select_query;
}

model 部分这么写

$this->db->select('SUM(charge) as charges');
$query = $this->db->get_where('tablename',$data);
if ($query->num_rows() > 0) {
    return $query->result_array();
}
    return $query->num_rows();


当数据表中有对应的数据,则没有问题,能正常显示,但当数据表中没有对应的数据的时候,这时候应该是返回$query->num_rows(),结果为 0,但是这里会返回结果 charges null,请问我这代码错在哪里呢?




发表于 2016-11-11 14:23:20 | 显示全部楼层
for 发表于 2016-11-11 14:10
可能我们的关注点岔开了,控制器及里面的写法,是给大家看的,我想解决的问题是当没有结果的时候,即便这 ...

num_rows() 这个方法是返回查询结果的行数,和数据库到底有多少行没有关系,查询结果是和 select 语句相关的。
根据你上面的代码,你应该取 SUM(charge) as charges 这个“列”的值,而不应该去取查询结果的行数,你的思路错了。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-11 13:45:02 | 显示全部楼层
代碼不夠完整
若如你說的是 0 的話
if ($select_query) 不會進來
发表于 2016-11-11 13:50:09 | 显示全部楼层
按代码里的sql查询后,这个条件$query->num_rows() > 0 不管有没有数据都是成立的,还有用echo输出数组是不对的
 楼主| 发表于 2016-11-11 13:58:18 | 显示全部楼层
Closer 发表于 2016-11-11 13:45
代碼不夠完整
若如你說的是 0 的話
if ($select_query) 不會進來

这个表是一个没有内容的空表,
当用 SUM(charge) as charges 时候,不管是否增加了后面的条件筛选条件,$query->num_rows() > 0 总是成立,因为它总会返回一条数据, 如下图 Screen Shot 2016-11-11 at 13.57.17.png
 楼主| 发表于 2016-11-11 14:00:48 | 显示全部楼层
本帖最后由 for 于 2016-11-11 14:03 编辑
kukalino1 发表于 2016-11-11 13:50
按代码里的sql查询后,这个条件$query->num_rows() > 0 不管有没有数据都是成立的,还有用echo输出数组是不 ...

$query->num_rows() > 0 不管有没有数据都是成立的,都是返回 1
如果我去掉 $this->db->select('SUM(charge) as charges'); 这时候就能正常的判断语句 $query->num_rows(),运行正常
发表于 2016-11-11 14:04:51 | 显示全部楼层
for 发表于 2016-11-11 14:00
$query->num_rows() > 0 不管有没有数据都是成立的,都是返回 1

if ($query->num_rows() > 0) {
    return $query->result_array();
}
===============
return $query->result_array(); 那他都会走这个 ,这个返回的是个二维数组啊

控制器
if ($select_query)
{
  echo $select_query;  //数组不能用echo啊
}

这程序肯定报错的啊,你得说明你现在需求是什么啊
 楼主| 发表于 2016-11-11 14:10:47 | 显示全部楼层
kukalino1 发表于 2016-11-11 14:04
if ($query->num_rows() > 0) {
    return $query->result_array();
}

可能我们的关注点岔开了,控制器及里面的写法,是给大家看的,我想解决的问题是当没有结果的时候,即便这个数据表中没有数据,为什么 $query->num_rows() 的返回还是 1,而不是 0
发表于 2016-11-11 14:20:39 | 显示全部楼层
for 发表于 2016-11-11 14:10
可能我们的关注点岔开了,控制器及里面的写法,是给大家看的,我想解决的问题是当没有结果的时候,即便这 ...

SUM() 函数
SUM 函数返回数值列的总数(总额)。这里指的就是charge字段
没有数据就是null

本版积分规则