0

我知道这是简单的 php,但是我很难用 codeigniter 写出我的逻辑。

我正在尝试提取 12 个最近的用户并在视图中显示他们的信息。我在我的数据库表中创建了一个“created_on”字段来跟踪注册活动。

当我在控制器中指定一个 id 时,我可以提取从模型传递到控制器然后是视图的结果,但是它只会像这样拉一个用户。

模型:

public function newest_members()
      {

            $session = $this->session->userdata('is_logged_in');
            $user_id = $this->session->userdata('id');

            $query = $this->db->query("SELECT * FROM users WHERE status = 'active' && id = $user_id ORDER BY created_on DESC LIMIT 12");

            if($query->num_rows()==1)
            {
               $data = $query->result_array();
               return $data;
            }else{
            return array();
        }

    }

控制器:

public function dashboard() 
    {
        $this->load->library('session');
        $this->load->helper('date');
        $session_id = $this->session->userdata('id');
        $this->load->model('account_model');
        $this->load->model('community_model');
        $user = $this->account_model->user();
        $data['user'] = $user;
        $newest_members = $this->community_model->newest_members();
        $data['newest_members'] = $newest_members;
        $data['main_content'] = 'account/dashboard';
        $this->load->view('includes/templates/main_page_template', $data);
    }

看法:

<?php 
    foreach($newest_members as $nm)
     {
         echo $nm['first_name']; echo "<br />"; echo $nm['last_name'];
     }
 ?>

这是提取最新成员和已登录成员的结果。但是我想拉所有已登录或不登录,所以我在我的模型上尝试这样的事情:

public function newest_members()
      {


            $query = $this->db->query("SELECT * FROM users WHERE status = 'active' ORDER BY created_on DESC LIMIT 12");
            // OR YOU CAN USE THE BELOW
            // $query = $this->db->query("SELECT * FROM users ORDER BY `created_on` DESC LIMIT 12");

            // YOU ALSO MIGHT WHAT TO ADD WHERE `status` = 'active' (or whatever applies for your db table)

            // EITHER SPIT OUT RESULTS OR EMPTY ARRAY
            if($query->num_rows()==1)
            {
               $data = $query->result_array();
               return $data;
            }else{
            return array();
        }

提前致谢。

4

4 回答 4

0
SELECT TOP 12 FROM users WHERE status = 'active' ORDER BY created_on DESC

我正在为此使用mssql,如果有帮助,请尝试

于 2013-03-12T04:12:13.320 回答
0

由于您使用 codeigniter,它有一个很棒的功能,称为活动记录,它使使用数据库更容易和更安全,然后将原始查询编写为可能导致 SQL 注入的字符串。这是您使用活动记录并返回您期望的结果的函数。

public function newest_members()
{
    //Select the 12 newest users
    $result = $this->db->where('status', 'active')->order_by('created_on', 'desc')->limit(12)->get('users');

    //If results are found return an array otherwise return an empty array
    return ($result->num_rows() > 0) ? $result->result_array() : array();
}
于 2013-03-12T03:48:43.870 回答
0

codeigniter num_rows() 函数不返回布尔值,而是返回从数据库中获取的结果数。因此,您的模型应该具有:

if($query->num_rows() > 0)
{
    ...
}

看到这里了解更多信息

于 2013-03-12T02:06:29.283 回答
0

你想拉12个最新的活跃成员吗?你说得对。

SELECT * FROM users WHERE status = 'active' ORDER BY created_on DESC LIMIT 12

此外,您不想检查是否只有一行返回。您想检查是否有超过零行返回。你需要这样做:

if($query->num_rows() > 0)
{
    $data = $query->result_array();
    return $data;
}
于 2013-03-12T02:06:39.557 回答