0

私の MySQL セットアップの列は favColors と呼ばれます。これは、各ユーザーの favColors を含む JSON 文字列を保存する単なる VARCHAR 列です。ものすごく単純。

これがユーザー A だとしましょうfavColors: ["red","green","cyan","silver","gold"]

そして、これはユーザー B のfavColors: ["pink","green","blue","brown","yellow"]

そして、これはユーザー C のfavColors: ["tan","green","blue","brown","yellow","violet"]

また、ユーザー B はクエリを実行して、同じ色を共有する他のユーザーを見つけたいと考えています。しかし、私はベストマッチを見つけることに興味があります。

このようなものを使用できると思います... WHERE MATCH (favColors) AGAINST ('$userBsJSONString' IN BOOLEAN MODE)

しかし、どの行が最も多く一致したかによって結果を並べ替え、一致した色を知りたいと思います。

だから基本的には、「ねえ、あなたたち二人とも「緑」、「青」、「茶色」、「黄色」が好き!

この情報を返すことができるクエリを実行する最善の方法は何でしょうか?

4

1 に答える 1

0

現在のデータ レイアウトではできません。

ここでは、非常に正規化されていないデータが得られます。必要な種類の分析を行うには、さらに 2 つのテーブルが必要です。

最初のテーブルはカラーです。各色には、一意の ID と色の名前があります。

次のテーブルは関連テーブルです。各行はユーザー ID と色 ID であり、ユーザーがその色を気に入っていることを示します。

次に、次のようなクエリ:

SELECT userID, COUNT(colourID) FROM associationTable 
   WHERE colourID IN (<list of IDs that belong to user of interest)
   GROUP BY userID

ごとuserIDに、一致した色の数がカウントされます。数字が大きいほど相性が良い

于 2012-07-11T01:41:12.227 に答える