8

MySQLテーブルがあるとしましょうpeople。各レコードは、、、、およびのさまざまなプロパティで構成さfavourite_colourcountryますage_group

私がやりたいのは、特定のパラメーターのセットとの類似性によって、このテーブルからレコードを取得することです。たとえば、「Red」、「United States」、および「18-25」を考えると、3つすべてに一致するレコードが最良の結果になります。これらは100%一致します。

ただし、2つのパラメーターの任意の組み合わせ(66%一致)または任意の1つのパラメーター(33%一致)に一致するレコードも取得したいと思います。underwear_typeさらに、追加の比較ポイント(たとえば、marital_statusなど)を定義できるようにしたいと思います。

この問題に対する比較的効率的な解決策はありますか?

4

2 に答える 2

11

はい、&cなどの各比較favourite_colour='Red'を0(false)または1(true)の値に変えることができます-mysqlは暗黙的にそれを行いますが、一般的には CAST( (favourite_colour='Red') AS INTEGER)&c;が必要な場合があります。次に、SUMこれらすべて、つまり、

SELECT
userId,
SUM( (favourite_colour='Red'),
     (country='US'),
     (age_group='18-25') ) AS match_score
FROM people
WHERE match_score >= 2
ORDER BY match_score DESC

最初に完全一致、次に2of3を提供します。さらに多くのチェックに一般化するのは簡単です!-)

于 2009-06-09T03:29:46.733 に答える
0

最初の3つは簡単です:

select * from people
where
(case when color = 'Red' then 33 else 0 end + 
case when age_group = '18-25' then 33 else 0 end + 
case when country = 'United States' then 33 else 0 end)>=33

「比較の追加点」の部分がわかりませんが、説明してもらえますか?

于 2009-06-09T03:29:36.170 に答える