for 发表于 2016-11-11 10:23:42

mysql 返回错误的问题

有一个数据表 tablename 包含的键值如下
idcharge 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,请问我这代码错在哪里呢?




Hex 发表于 2016-11-11 14:23:20

for 发表于 2016-11-11 14:10
可能我们的关注点岔开了,控制器及里面的写法,是给大家看的,我想解决的问题是当没有结果的时候,即便这 ...
num_rows() 这个方法是返回查询结果的行数,和数据库到底有多少行没有关系,查询结果是和 select 语句相关的。
根据你上面的代码,你应该取 SUM(charge) as charges 这个“列”的值,而不应该去取查询结果的行数,你的思路错了。

Closer 发表于 2016-11-11 13:45:02

代碼不夠完整
若如你說的是 0 的話
if ($select_query) 不會進來

kukalino1 发表于 2016-11-11 13:50:09

按代码里的sql查询后,这个条件$query->num_rows() > 0 不管有没有数据都是成立的,还有用echo输出数组是不对的

for 发表于 2016-11-11 13:58:18

Closer 发表于 2016-11-11 13:45
代碼不夠完整
若如你說的是 0 的話
if ($select_query) 不會進來

这个表是一个没有内容的空表,
当用 SUM(charge) as charges 时候,不管是否增加了后面的条件筛选条件,$query->num_rows() > 0 总是成立,因为它总会返回一条数据, 如下图

for 发表于 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(),运行正常

kukalino1 发表于 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啊
}

这程序肯定报错的啊,你得说明你现在需求是什么啊

for 发表于 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

kukalino1 发表于 2016-11-11 14:20:39

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

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

页: [1]
查看完整版本: mysql 返回错误的问题