Php 从Codeigniter查询中获取正确的数据?

Php 从Codeigniter查询中获取正确的数据?,php,mysql,arrays,codeigniter,Php,Mysql,Arrays,Codeigniter,我目前正在尝试使用codeigniter active record从我的数据库中获取一个数组,这是我经常做的事情,但我目前在获取正确的数据时遇到了问题 有4条记录应该从我的模型返回给我的控制器。此时,将返回表中的所有记录 我在查询中使用了一个foreach循环,因为查询where/或\u where子句可以是多个值。这就是问题所在,因为我认为它绕过了foreach和get的所有记录,而没有查看where子句 我的问题是关于第二个例子的问题是什么 工作 以下代码获取所需的4条应返回的记录: pu

我目前正在尝试使用codeigniter active record从我的数据库中获取一个数组,这是我经常做的事情,但我目前在获取正确的数据时遇到了问题

有4条记录应该从我的模型返回给我的控制器。此时,将返回表中的所有记录

我在查询中使用了一个
foreach
循环,因为查询
where
/
或\u where
子句可以是多个值。这就是问题所在,因为我认为它绕过了foreach和get的所有记录,而没有查看where子句

我的问题是关于第二个例子的问题是什么

工作

以下代码获取所需的4条应返回的记录:

public function get_most_relevant($user){

    $categories = $this->get_users_most_common_categories($user);

    $this->db->order_by('posts.date_created','DESC');
    $this->db->limit(25);
    $this->db->select('*');
    $this->db->from('posts');
    $this->db->select('posts.image_name as post_image');
    $this->db->select('posts.random_string as post_string');
    $this->db->select('posts.date_created as post_creation');
    $this->db->join('users', 'posts.user_string = users.random_string','left'); 
    $this->db->where('category_string', 'cCU8oEQHYLWP');
    $this->db->or_where('category_string', '8RfRDWrG5QB7');

    $posts = $this->db->get();

    return $posts;

}
不工作

以下代码从表中获取所有记录:

public function get_most_relevant($user){

    $categories = $this->get_users_most_common_categories($user);

    $this->db->order_by('posts.date_created','DESC');
    $this->db->limit(25);
    $this->db->select('*');
    $this->db->from('posts');
    $this->db->select('posts.image_name as post_image');
    $this->db->select('posts.random_string as post_string');
    $this->db->select('posts.date_created as post_creation');
    $this->db->join('users', 'posts.user_string = users.random_string','left'); 
    $this->db->where('category_string', 'cCU8oEQHYLWP');
    $this->db->or_where('category_string', '8RfRDWrG5QB7');

    $posts = $this->db->get();

    return $posts;

}
它似乎绕过了
foreach
,直接进入
get()

$this->get_users_most_common_categories($user)code

public function get_users_most_common_categories($user){

    $categories = $this->db->query("SELECT category_string, COUNT(category_string) AS category_occurence FROM views WHERE user_string = '".$user."' OR ip_address = '".$user."' GROUP BY category_string ORDER BY category_occurence DESC");

    return $categories;

}
$this->get\u users\u most\u common\u categories($user)return

Array
(
[0] => Array
    (
        [category_string] => cCU8oEQHYLWP
        [category_occurence] => 3
    )

[1] => Array
    (
        [category_string] => 8RfRDWrG5QB7
        [category_occurence] => 1
    )

)
查询输出

选择*,
posts
image\u name
作为post\u图像,
posts
random\u string
作为post\u字符串,
posts
作为post\u创建的日期(
posts
)左键连接
用户
帖子上
用户字符串
用户
随机字符串其中
类别字符串
='cCU8oEQHYLWP'和
发布
='1'或
类别字符串
='8RfRDWrG5QB7'或
发布
='1'顺序由
帖子创建
描述限制25


提前感谢您的帮助,非常感谢。

您可以使用CI DB驱动程序的上次查询功能来查找查询中的错误。它返回上次运行的SQL字符串。然后,您可以在数据库客户机中执行该查询,并对其进行调整,直到得到所需的结果

$posts = $this->db->get();
$sql = $this->db->last_query();
echo $sql;

这可能是一个错误。您可以尝试将查询的这一部分编写为字符串,您可以将其传递到
where
或\u where

foreach($categories->result_array() as $category){
    $query = "(category_string = ".$category['category_string']." AND published = '1')";

    if($i == 0){
        $this->db->where($query);
    }else{
        $this->db->or_where($query);
    }   
    $i++;
} 

…-查看第4部分自定义字符串
$categories->result_array()
返回非空数组的位置?@DavidNormington不确定非空数组是什么意思,但查看我的编辑,谢谢。@DavidNormington它似乎在添加
而不是
之间的
'category\u string'='8RfRDWrG5QB7'或'published'='1'
,你能看看我添加查询的编辑吗?可能是个bug。您可以尝试将查询的该部分写入字符串,您可以将其传递到
where
$this->db->where(“((category\u string=“.category['category\u string']”和published='1')-请参阅
其中
第4部分自定义字符串。@DavidNormington这正是它的原意,但我现在已使查询工作正常,这让我很高兴。请随意创建一个答案,我会接受的,谢谢。它似乎是在添加一个
而不是
之间的
'category\u string'='8RfRDWrG5QB7'或'published'='1'
,你能看看我在哪里添加了查询的编辑吗?不要使用
$this->db->或
使用
$this->db->where()