0

私のデータベースには、値を持つフィールドがあります

1 ブルーホワイト

2 白 青

3 青

4 ホワイト

すべてのIDに対して。

$color="White Blue" を宣言してモデルに渡すコントローラーがあります。私のモデルでは、'explode' を使用して 2 つの単語を分離し、for-each を使用して抽出します。

これが私のモデルです:

  public function test($color){

    $arry = explode(" ", $color); 

    foreach($arry as $colr){
    $this->db->where("tags like '%$colr%' or 
            tags like '%$colr'or 
            tags like '$colr%' ");
            }


    $q=$this->db->get('test');
    return $q;

    }

ローカルホストで実行しようとすると、Call to a member function result() エラーが発生します。この種のエラーは、データベースからデータが取得されないことを意味します。クエリにエラーを入力しようとしたときに、最初の for-each の後に「OR」を使用すると、代わりに「AND」が使用されることがわかりました。どうすればこれを機能させることができるかについて何か考えがありますか?

4

2 に答える 2

1
tags like '%$colr'or

スペースがありませんか?

tags like '%$colr' or

さらに、「%」の間に $colr を配置するだけで十分です。他の行は必要ありません。

したがって、これでうまくいくはずです:

public function test($color){

    $arry = explode(" ", $color); 

    foreach($arry as $colr){
      $this->db->where("tags like '%$colr%' "); 
    }

    $q=$this->db->get('test');
    return $q;

}
于 2012-09-03T20:09:01.500 に答える
1
public function test($color){

    $arry = explode(" ", $color); 
    foreach($arry as $colr) $this->db->or_where("tags like '%$colr%' "); 
    $q=$this->db->get('test');
    return $q;

}
于 2012-09-03T20:19:55.683 に答える