0

私はこれが単純なphpであることを知っていますが、codeigniterでロジックを書き出すのに大きな問題があります。

最近の12人のユーザーをプルして、その情報をビューに表示しようとしています。サインアップのアクティビティを追跡するために、データベーステーブルに「created_on」フィールドを作成しました。

コントローラーでIDを指定すると、モデルからコントローラーに渡した結果をプルしてからビューをプルできますが、そのようにプルするのは1人のユーザーだけです。

モデル:

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'];
     }
 ?>

これは、NEWESTメンバーとサインインしているメンバーの結果をプルしています。ただし、サインインしているかどうかにかかわらず、すべてをプルしたいので、モデルで次のようなことを試みました。

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

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

また、1行だけが返されているかどうかを確認する必要はありません。ゼロを超える行が返されているかどうかを確認する必要があります。代わりにこれを行う必要があります:

if($query->num_rows() > 0)
{
    $data = $query->result_array();
    return $data;
}
于 2013-03-12T02:06:39.557 に答える
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
SELECT TOP 12 FROM users WHERE status = 'active' ORDER BY created_on DESC

私はこれにmssqlを使用しています、それが助けになるならそれを試してください

于 2013-03-12T04:12:13.320 に答える