0

このチュートリアルに基づいてキーワード検索スクリプトを書いています: http://www.hackosis.com/2007/11/06/howto-simple-search-engine-with-php-and-mysql/

言及された一部のコメント投稿者のように、スクリプトは検索語の最後の単語に基づいて結果を返すだけです。そのため、別のユーザーからの提案の 1 つを実装しようとしましたが、最初の検索語に基づいた結果しか得られないようです。

私のスクリプトのコードはここにあります: http://php.pastebin.com/m7759afd3

結果の私の print_r は次のようになります。

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' AND blog_title LIKE '%child%' OR blog_content LIKE '%child%' AND blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

SELECT * FROM links WHERE link_title LIKE '%barry%' OR link_desc LIKE '%barry%' AND link_title LIKE '%child%' OR link_desc LIKE '%child%' AND link_title LIKE '%help%' OR link_desc LIKE '%help%' ORDER BY link_title

SELECT * FROM pages WHERE page_title LIKE '%barry%' OR page_content LIKE '%barry%' AND page_title LIKE '%child%' OR page_content LIKE '%child%' AND page_title LIKE '%help%' OR page_content LIKE '%help%' ORDER BY page_title

あなたが提供できるかもしれないどんな助けにも感謝します.

4

2 に答える 2

3

いずれかのキーワードを含む結果を返す場合は、すべてのANDORに置き換えます。

これを行うと、データベースはテーブルの列にキーワードが存在するかどうかを確認します。

したがって、最終的なクエリは次のように DB サーバーによって読み取られます。

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' OR blog_title LIKE '%child%' OR blog_content LIKE '%child%' OR blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

任意の列にキーワード (barry、child、help) を持つすべてのレコードを返す必要があります ( blog_title, blog_content)。

お役に立てれば。

于 2008-11-16T10:18:44.427 に答える
1

AND 演算子は OR よりも優先順位が高いため、すべてのキーワードを含む結果を返したい場合は、次のように括弧を追加する必要があります。

  SELECT * FROM blog
  WHERE (blog_title LIKE '%barry%' OR blog_content LIKE '%barry%')
    AND (blog_title LIKE '%child%' OR blog_content LIKE '%child%')
    AND (blog_title LIKE '%help%' OR blog_content LIKE '%help%')
  ORDER BY blog_title
于 2008-11-16T12:21:29.047 に答える