2016-05-04 3 views
6

私が実行しようとしているクエリのコードがあるCodeIgniterのMySQLのクエリで余分なスペースを取得

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get(); 

$items = $query->num_rows(); 

MySQLのクエリ文字列が

SELECT replace(name, ' = ', ' ') FROM `items` 

は何のコードは空白を追加してやっていますクエリのコンパイル時に "="の前後に "="が表示され、名前に "="が含まれている項目がないため結果を返しません。私が使用している

foo=bar, replace(name, '=', ' ') returns 1 result. 
foo = bar, replace(name, ' = ', ' ') returns 0 results. 

のCodeIgniterのバージョンがある:3.0.6

+0

なぜあなたはmysqlでこれをしたいのですか?それは素晴らしいアプローチではありません。 dbへのクエリを行う前後に、文字列のstrを置き換えることができます。 – Philip

+0

@Philip私がこれをやっているのは、私が置き換えようとしていることは必ずしも同じものではなく、 "。"、 " - "または "+"一緒にしかし "=" 。 – Joscplan

+0

私は解決策を提供できるように私に例を与えます。 – Philip

答えて

6

私はCodeIgniterの私のコピーでこれをテストしてきたし、このようにフォーマットする場合それだけで正常に動作します:

$items = $this->db->like("replace(name, '=', ' ')", "foo bar", 'both')->get('items')->num_rows(); 

いくつかの注意事項:

  1. ()からは不要ですが、テーブルをget()メソッドに滑らせるだけで済みます。
  2. メソッドを1つの変数に割り当てるだけで済みます。
  3. select()メソッドを省略すると、select( '*')を意味します。
2

あなたの構文

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get(); 

fooと、それが失敗したバーの間に1つの以上のスペースが事故であった場合、実際にhereは、このクエリに

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo bar%'; 

を生産して示すように。

さらに良い

SELECT * FROM `items` WHERE CONCAT(TRIM(SUBSTRING_INDEX(name, '=', 1)),' ',TRIM(SUBSTRING_INDEX(name, '=', -1))) LIKE '%foo bar%'; 

この

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo%bar%'; 
012を使用しないでください。この代替クエリ

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo% bar%'; 

CodeIgniterの

$query = $this->db->select('*')->from('items')->like("replace(name, '=', ' ')", "foo% bar", 'both')->get(); 

ORこの文字列で検索してくださいこれらのクエリのの

結果は、あなたがスペースを末尾に/大手削除クエリ(Example

2

を持つことができますどちらかhere

を示している私はCodeIgniterのか、PHPに関連付けられている中で、メソッド呼び出しreplace()を見つける傾けます。

str_replace(find,replace,string)

$one = 'as = bb = cc=dd '; 
$var = str_replace('=', ' ', $one); 
echo $var; 

phpfiddle Preview

試してみて、クエリ内にコードをリファクタリングしていません。それをきれいにして照会に渡してください。そのエラーも簡単に追跡できます。

+1

'replace'メソッドはMySQLで利用可能です –

0

私の代わりに

$this->db->select(); 
$this->db->order_by(); 
$this->db->get(); 

$this->db->query()

を使用し、それが私のために働きました。

私のクエリは:

$records = $this->db->select(
"id,(select count(*) from 
(select 
     unnest(string_to_array(mycol,',')) v 
     from mytable) t where v::int > 0) as total", 
FALSE)->order_by("col1")->get("mytable1")->result_array(); 

問題は、それがエラーを与えていたstring_to_array(mycol,', ')で余分なスペースを追加しました。

関連する問題