2016-11-01 9 views
0

私は直面している問題について質問したいと思います。2ワードのようなMysql検索

「John Doe」という名前の1列のフルネームが格納されています。

しかし、上の例のための検索を実行します。

SELECT * FROM client WHERE name LIKE '%Doe John%'; 

結果:0行。

データベースの完全一致ストアに切り替えると、行が見つかりました。

SELECT * FROM client WHERE name LIKE '%John Doe%'; 

結果:1行。

私の質問は、単語の順序を取らずにデータベースを検索する方法です。 OOPの枠組みで

コードは次のとおりです。

$like = 'Doe John'; 
$this->db->select('*')->from('client')->like('name', $like)->get(); 

はまた、私はこれをテストしたが、私は同じ結果だ:誰かがトラフこれに合格し、私は共有を感謝し、より良い解決策を持っている場合

$this->db->select('*')->from('client'); 
if($this->containTwoWords($like)) { 
    $explode = explode(' ', $like); 
    foreach($explode as $exploded){ 
    $this->db->like('name', $exploded); 
    } 
} else { 
    $this->db->like('name', $like); 
} 
$this->db->get(); 

function containTwoWords($like){ 
    if(strpos($like, ' ') !== false) { 
    return true; 
    } 
    return false; 
} 

を! 。あなたの例の場合の

答えて

1

一つのオプションは個別に姓と名を確認するために、次のようになります。

SELECT * FROM client WHERE name LIKE '%Doe%' AND name LIKE '%John%' 

あなたはLIKE演算子で、このようなトリックを使い果たしてしまった場合は、MySQLのフルテキスト検索を使用してに見ることができます能力。

+0

おかげで、 " '%のような%' LIKE '%のような%' AND LIKE" 私は得るために爆発する機能をPHPで作られたものですが、それでも検索結果はありません。 ! – ndAR

+0

あなたは常に2つの名前を含む入力を期待していますか? –

0

あなたが最初/最後の名前に変数のような$を爆発的に(そして、あなたは常にスペースで区切っ2名を、期待して)、これはあなたのために働く必要が欠けている場合は、このname like '%John%' and name like '%Doe%'

+0

この方法では簡単ですが、2単語をどのように爆発させるのですか? – ndAR

0

を試してみてください。

PHPにはexplode()メソッドが組み込まれており、求めていることを正確に行います。以下のように使用できるMySQLで実際にそう

$like = "John Doe"; 
$name = explode(" ", $like); 

// This created a 0-based array, meaning the first item as split 
// by the space between John and Doe is given the array index of 0. 
// $name[0] = John 
// $name[1] = Doe 

http://php.net/manual/en/function.explode.php

希望:爆発()関数の詳細については

$query = "SELECT * FROM client WHERE name LIKE '%" . $name[0] . "%' AND name LIKE '%" . $name[1] . "%'"; 

は、PHPでマニュアルをチェックしてくださいこれは役に立ちます!

1

はこのような何か試してください:あなたの提案のための

<?php 
$search_term = 'john doe abc'; 
$keywords = explode(" ", preg_replace("/\s+/", " ", $search_term)); 
foreach($keywords as $keyword){ 
$wherelike[] = " name LIKE '%$keyword%' "; 
} 
$where = implode(" and ", $wherelike); 

$query = "select * from client where $where"; 

echo $query; 
//select * from client where name LIKE '%john%' and name LIKE '%doe%' and name LIKE '%abc%' 

?>