2011-12-05 11 views
1

次のコードは、各投稿のTITLE属性を取得します。私はそれをLIKEがSQLで動作する方法と同様のものを使って$ fという検索フレーズと比較したいと思います。PHP検索システム - LIKEの使い方

<?php 

$terms = $_GET['f']; 

$searchs = get_posts($args); 

foreach($searchs as $search){ 

    $title = get_the_title($search); 

その後、我々はどのようにそれが働くだろう

if($title is LIKE $f) { } 

ようなものが必要でしょうか?

+1

あなたは「LIKE」とはどういう意味ですか? 'posts'の中の投稿をどのように取得しますか?大量のデータをフィルタリングする必要がある場合は、PHPスクリプト内よりもデータベースクエリ内でそれを行うほうがはるかに効果的です。 – jsalonen

+1

これは[MySQLのこと](http://www.mysqltutorial.org/sql-like-mysql.aspx)です。 – Blender

+0

これは賢明な考えではありません。すべての投稿を取得するための料金を支払う可能性があるからです。あなたはデータベースを持っていますか? – ajreal

答えて

0

LIKEは、あなたがそうのようなSQL文でそれを使用する必要があり、MySQLのキーワードである:

SELECT * FROM posts WHERE title LIKE '%keyword%'; 

あなたがPHPを使用して検索を行いたい場合は、あなたがそうのようなstrpos使用することができます。

if(strpos($title, $keyword) !== FALSE) { } 
0

MySQLまたはPostgreSQL full text searchを検索する必要があります。 LIKEは、 "あいまいな"検索をする予定がある場合や、単純な文字列の比較よりも力が必要な場合には必要なものではありません。

1

あなたの言い方からすれば、実際のLIKEまたは全文検索ではデータベース内で行うことはできません。たぶんあなたが思うのは正規表現ですが、これはSQLの "LIKE"演算子で提供されるパターンマッチングより少し進んでいますが、同じ目的のために使うことができます。

PHPには「Perl Compatible Regular Expressions」ライブラリが組み込まれています。ここをクリックしてください:http://uk.php.net/manual/en/book.pcre.phpまたは標準正規表現構文の紹介をオンラインで探してください。

単純なケースとして、あなたはこれをしたいかもしれませんが:

// Compose your matching pattern 
// Be sure to escape user-supplied parts 
// ".*" is roughly equivalent to "%" in LIKE 
// the "/i" modifier means "case insensitive" 
$pattern = '/.*' . preg_quote($_GET['f']) . '.*/i'; 

$searches = get_posts($args); 

foreach($searches as $search) 
{ 
    $title = get_the_title($search); 

    if (preg_match($pattern, $title)) 
    { 
     # FOUND A MATCH! 
    } 
} 
関連する問題