2016-06-24 8 views
0

私はPDOを使用して検索結果のためにMySQLテーブルを検索しています。MySQLの検索結果を関連性の高いものにするにはどうすればよいですか?

$query.'%' 

次のように一致する結果の前に表示されます::

私のクエリは、私の結果の配列に、次のように一致する結果があることである私が達成しようとしているこれは何

$sql = "SELECT * FROM users WHERE username LIKE :username OR name LIKE :name ORDER BY uniqueid DESC LIMIT 6"; 
$stmt = $conn->prepare($sql); 
$stmt->bindValue(':username', '%'.$query.'%'); 
$stmt->bindValue(':name', $query.'%'); 

のように見えます

'%'.$query.'%' 

2つのクエリなしで、好ましくは純粋なSQLで、そのような関連性によって結果をソートする方法はありますか?

+0

使用スフィンクスこの検索エンあなたは関連性によって並べ替えることができますので、これをクリックして結果にリンクしてください。 – Naumov

+0

これを試してください。クエリの順序を変更してください:** $ SQL = "SELECT * FROM username WHERE username LIKE:ユーザー名OR名LIKE:名前ORDER BY名前LIKE:名前DESC、uniqueid DESC LIMIT 6"; ** –

答えて

0

まあ、ユージンの答えは、この場合に最も適切と思われます。下に設けられたが、結果をソートするという点で、さらにカスタマイズを可能にする一般的な問題への代替ソリューションです。

あなたは、このようなデータがある場合:次に

Id Name 
1 Aabbee 
2 Aabriella 
3 Aada 
4 bahlelah 
5 cailelah 
6 daielah 
7 gaisha 
8 Aisha 
9 Aishath 
10 dalelh 
11 Eleasha 

を、あなたは次のクエリを使用することができます。

select '1' as Relevance,ID, Name from MyTable where Name like 'el%' /*The results with the priority (or relevance) should be first */ 
union 
select '2' as Relevance,ID, Name from MyTable where Name like '%el%' and Name not like 'el%' /* The lower priority results go here*/ 
order by Relevance 

これは、になります:検索のための

Relevance ID Name 
    1  11 Eleasha 
    2  2  Aabriella 
    2  4  bahlelah 
    2  5  cailelah 
    2  6  daielah 
    2  10 dalelh 
+0

ありがとうございますが、これは2つのクエリとしてカウントされませんか?または、スピードとパフォーマンスの影響は最小限ですか? –

+0

@ 15KanurajBeriいいえ、これは1つのクエリとしてカウントされます。速度とパフォーマンスは単純なものではありません。これは、特定のケースの生データサイズに依存します。一般に、小さなデータセットでは問題になりません。 –

+0

ありがとうございます。あなたの答えは完璧でした。私が最初に従う人たちを見せたいと思ったら、それは後にスコープを残します。受け入れられました。 –

1

あなたがusernamename$queryのインデックスで結果を注文することができます:

SELECT * FROM users 
    WHERE username LIKE :username OR name LIKE :name 
ORDER BY uniqueid DESC, INSTR(:query, username), INSTR(:query, name) LIMIT 6 

注意、しかし、関数の結果によってその順序はMySQLで全表スキャンが必要です。

+0

ありがとうございます!ただし、この特定のクエリは機能していないようです。多分あなたは私を助けることができますか? PHPルーキーに手伝ってくれてありがとう。 –

-1

あなたは簡単にこのクエリを使用することができます。

$SQL = "SELECT * FROM users WHERE username LIKE :username OR name LIKE :name ORDER BY name LIKE :name DESC, uniqueid DESC LIMIT 6"; – 
+0

私はあなたがなぜ非常に良いこの答えをdownvote知っていません。 –

関連する問題