2011-03-03 3 views
2

私はクエリを持つモデルに配列を渡そうとしています。私は正しく配列を渡すかどうか、または何とか配列を操作する必要があるかどうかはわかりません。私はこのモデル有するcodeigniterクエリに配列を渡す

$ratings = $this->login_model->get_ratings($mechanicIds); // get the mechanic ratings 

:それは実際に結果を返し

function get_ratings($mechanicId) 
    { 
     $sql = "select m.mechanic_id, 
        m.mechanic_name, 
        m.city, 
        m.state, 
        count(mr.rating_id) as num_ratings, 
        round(avg(mr.rating_id),2) avg_rating 
       from mechanic m, mechanic_rating mr, rating r 
       where m.mechanic_id in (?) 
       and m.mechanic_id = mr.mechanic_id 
       and mr.rating_id = r.rating_id"; 

     $query = $this->db->query($sql, $mechanicId); 

     if($query->num_rows() > 0) 
     { 
      return $query->result_array(); 
     } 
     else 
     { 
      return false; 
     } 
    } 

を、私はこの線とコントローラを有する

Array 
(
    [0] => 1 
    [1] => 2 
) 

私はこの配列を有します問題は、私の配列に2つの結果があるので、2を返すべきであるときに結果の1行だけを返します。誰でも私が間違っていることを知っている?

+0

配列の要素は、それらがクエリにWHERE句で使用されていますか? – kushalbhaktajoshi

+0

はい私は「どこにm.mechanic(?)」という行にそれらを使用しようとしています – Catfish

答えて

2

あたりのように私は助けたこの質問を見つけました。

以下は私が使用したコードです。これを含ま

コントローラ:これを含ま

   $mIds_size = count($mIds); 
       $i = 1; 

       foreach($mIds as $row) 
       { 
        if($i == $mIds_size) 
        { 
         $mechanicIds .= $row; 
        } 
        else 
        { 
         $mechanicIds .= $row.', '; 
        } 
        $i++; 
       } 

       $ratings = $this->login_model->get_ratings($mechanicIds); // get the mechanic ratings 

モデル:

function get_ratings($mechanicId) 
    { 

     $this->db->escape($mechanicId); 

     $sql = "select m.mechanic_id, 
         m.mechanic_name, 
         m.city, 
         m.state, 
         count(mr.rating_id) as num_ratings, 
         round(avg(mr.rating_id),2) avg_rating 
       from mechanic m, mechanic_rating mr, rating r 
       where m.mechanic_id in ($mechanicId) 
       and m.mechanic_id = mr.mechanic_id 
       and mr.rating_id = r.rating_id 
       group by mechanic_id"; 

     $query = $this->db->query($sql, $mechanicId); 

     if($query->num_rows() > 0) 
     { 
      return $query->result_array(); 
     } 
     else 
     { 
      return false; 
     } 
    } 
+2

にリンクしているドキュメントの "Query Bindings"の部分を読んでくださいあなたのforeachループは 'implode( '、'、$ mIds);と正確に等しくなります; – jfoucher

+0

これは私の頭に新鮮ではないので古い質問です。あなたはあなたの答えにコメントを読んでいますか?これは、すべての要素を組み合わせて単一引用符を付けるので機能しません。 – Catfish

+0

私は、Codeigniterはおそらくそれが渡される値を自動的にエスケープしていることを理解しています。 – jfoucher

1

変更この行:これまで

$query = $this->db->query($sql, $mechanicId); 

$query = $this->db->query($sql, array(implode(', ',$mechanicId))); 

the manual

+0

私はこれを一度に持っていましたが、結果は1つしか戻っていませんでした。あなたの答えを再生した後、私は私のクエリでgroup by節を持っていなかったのでそれが実現しました。ご協力いただきありがとうございます。 – Catfish

+0

私はそれが動作していないと思う。私がmysqlで "m.mechanic where(1,2)"を使ってクエリを実行すると、2行が得られます。私が私のプログラムで "m.mechanic in(?)"という行を使う以外は同じクエリを試してみると、1つの結果しか得られません。 – Catfish

+0

ドキュメントを見ると、配列の2番目の要素を使用するために別の疑問符が付くと思います。 – Catfish

関連する問題