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

[已解决] 数据库操作 如何写where 中的 where_in

[复制链接]
发表于 2014-3-24 15:34:59 | 显示全部楼层 |阅读模式
本帖最后由 Moved_Permanent 于 2014-3-25 09:05 编辑
PHP复制代码
 
/* 获取明细列表 */
public function getMoneyList($whereArr, $offset=0, $perpage=10, $order='', $orderVal='') {
    $result = ARRAY();
    $this->CI->db->select('id,money,add_time,user_id,user_account,category_id,note,score_id,update_time');
    if (!empty($order) && !empty($orderVal) ) $this->CI->db->order_by($order, $orderVal);
    if (!empty($whereArr)) $this->CI->db->where($whereArr);
    if (!empty($perpage)) $this->CI->db->limit($perpage, $offset);
    $query = $this->CI->db->get('om_detail');
    if ($query->num_rows() == 0) return $result;
 
    foreach ($query->result_array() as $row)
        $result[$row['id']] = $row;
 
    return $result;
}
 
复制代码


这是一个获取明细列表的方法,只要传递条件数组、偏移量、分页、及排序和值就可以将所需要的明细返回过来。

现在有一个问题是,我想获取多个category_id;我不知道怎么取了。

我查询了CI手册里面的,可以使用where_in,但是,不知道怎么与这个方法相结合。

期望大家指点下。

另外,手册上是,可以使用
自定义 key/value 方法:  你可以在第一个参数中包含一个运算符,以便控制比较:
PHP复制代码
 
$this->db->where('name !=', $name);
 $this->db->where('id <', $id);
 
// 生成: WHERE name != 'Joe' AND id < 45
 
复制代码

上面介绍了,大于、小于之类的“隐含式操作符”,能不能使用IN呢?怎么写?

感谢!!!
发表于 2014-3-24 20:21:02 | 显示全部楼层
$whereArr = array('category_id'=>array(ID)……)以数组形式写入whereArr
函数中判读ID个数
为1的话就直接上文中操作
>1 先where_in('category_id',$whereArr) 然后unset掉$whereArr['category_id'],再where($whereArr)
 楼主| 发表于 2014-3-25 09:01:07 | 显示全部楼层
{:soso_e179:}

一个不错的解决方法,感谢!

PHP复制代码
 
foreach ($whereArr as $key => $val) {
        if (is_array($val)) {
            $this->CI->db->where_in($key, $val);
            unset($whereArr[$key]);
        }
}
 
复制代码

本版积分规则