如何从数据库和限制中提取ALL而不是特定的ID?

时间:2013-03-12 01:53:37

标签: php mysql codeigniter

我知道这是一个简单的php,但是我在使用codeigniter写出逻辑时遇到了很大麻烦。

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

当我在控制器中指定一个id时,我能够将结果从我的模型传递到我的控制器,然后是我的视图,但是它只会拉动一个用户。

MODEL:

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 个答案:

答案 0 :(得分:0)

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

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

有关详细信息,请参阅here

答案 1 :(得分: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;
}

答案 2 :(得分: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();
}

答案 3 :(得分:0)

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

我正在使用mssql,如果有帮助可以试试