2012-03-12 4 views
3

によって、見つけカウントと注文した結果、私はこのようなクエリを持っている:PHP MySQLの数

$sql = "SELECT * 
      FROM global_info 
      WHERE title LIKE '%$string%' 
       OR tag LIKE '%$string%' 
       OR body LIKE '%$string%'"; 

はどのようにして、各行の結果の数をカウントして、カウント数に基づいて結果を注文することができますか?

例えば 行1:

タイトル:

Adricatic海のニースの写真

ボディ:

これは私とアドリア海での私の友人であります海、モンテネグロのどこか。 Adricatic seaの色は素晴らしいです。

タグ:

アドリア海、写真

行2:

タイトル:

Adricatic海

ボディ:正午

テイク

タグ:

アドリア海、写真

誰か検索:

アドリア海フォト

行1、行2以上の結果を有していて、それは、クエリ結果の最初の場所にあります。

+0

実際には、表示されている列に完全なフレーズが含まれていないため、「LIKE '%adriatic sea photo%'」の検索結果は表示されません。 –

+2

外部のphp(SQLクエリのみ)が可能かどうかは不明ですが、php count()を使用して、各カテゴリでいくつの結果が選択されているかを確認できます。 –

+0

FULLTEXTインデックスを使用し、関連スコアで注文する方がよいでしょう。あなたがLIKE比較を介して欲しいのは、醜い醜いクエリになります。 –

答えて

1

2つの方法があります。

1つは、フルテキスト検索を使用することです - これはあなたを別のしかし非常に有用な方向に連れていくでしょう。詳しくはhttp://dev.mysql.com/doc/refman/5.0/en/fulltext-search.htmlをご覧ください。もちろん

(LENGTH(`body`) - LENGTH(REPLACE(`body`, 'Adricatic', '')))/LENGTH('Adricatic') 

、あなたがすることにより検索語を保持する変数で「『Adricatic』」に置き換えたい:

他のアプローチは、テキスト置換を行う際に強度の長さの変化を使用して、それを推測することですあなたのユーザー。そして、あなたはスコアに貢献したいと思っているフィールドごとに繰り返すでしょう。スコアを合計すると、結果が得られます。