0

ばかげた質問かもしれませんが、次のようなフィールドを持つテーブルがあると想像してください。

wholename, lastname, firstname, dateOfBirth

ここで、ユーザー入力に基づいてそのテーブルを検索したいのですが、結果に一致率を付けたいと思います。意味:

lastname + firstname+dateOfBirthがすべてデータベースmatchPrct=100にある場合。lastname+dataofBirthがデータベースmatchPrct=80にある場合。その他のいくつかのルール(つまり、フィールドmatchPrctは自動生成されたフィールドであり、実際にはそうではありません。データベース内)。

私が達成したいSQLは次のとおりです。

SELECT * FROM table 
WHERE firstname="%mike%" AND lastname="%tysson%" AND dateOfBirth="01/01/2012"
(create matchPrct=100) OR ....

私が言っていることが明確であることを願っています。

4

1 に答える 1

0

LIKEはブール値を返す演算子であり、=同様に動作します。MySQLのブール値は、trueの場合は1、falseの場合は0です。それはあなたがこれを言うことができることを意味します:

select *,
      ((firstname like '%mike%') + (lastname like '%tysson%') + (dateOfBirth = '01/01/2012')) / 3.0 as score
from table
where firstname like '%mike%'
   or lastname like '%tysson%'
   or dateOfBirth = '01/01/2012'

次に、から「どの程度一致したか」の値を読み取りますscore。また、各コンポーネントに個別の重みを適用して、名前の一致が名の一致よりも多くカウントされるようにすることもできます。

ブール値として1と0を使用しないデータベースでは、それらをキャストするか、CASEを使用してブール値を必要な数に変換できます。もちろん、これはMySQLには当てはまりませんが、覚えておく価値があります。

于 2012-11-26T04:40:16.397 に答える