2011-03-03 15 views
1

こんにちは、この質問をもう一度見ていただきありがとうございます。フィールドの比較とパーセンテージの取得

私は訪問者用に1つのmysqlテーブルを持っています。お気に入りの歌手をリストに追加することができます。だから、テーブルには、非常にシンプルになります。私はしたいと思い何

1. Michael Jackson 
2. Ray Charles 
3. Stevie Wonder 
4. Lady Gaga (sorry folks) 

:ユーザーテスターはまた、4人の好きな歌手だ

1. Michael Jackson 
2. Elvis Presley 
3. Ray Charles 
4. Stevie Wonder 

user_artist_favorites 
id 
user_id 
artistName 

はのは、ムーンウォーカーは4人の好きな歌手を得たとしましょう2人のユーザーを比較して、次のような出力をします:Moonwalker &テスターは音楽の75%の味を持っています。

開始の仕方?誰かが正しい方向に私を向けることができますか?

お手数ですがお寄せいただきありがとうございます。

+0

何の75%?それはあなたの定義によります。パーセンテージは常に相対的です。 – Czechnology

+0

テスターがムーンウォーカーと同じアーティストを持っていれば、それは100%になるでしょう。今度は彼は4のうち3を得たので、両方のユーザーがお気に入りのテーブルにある合計歌手の75%です。それとも、あなたが求めていることではないのですか? – moonwalker

+1

あなたはどれくらいの歌手が合計%と同じであるか知りたいと思うと思います。お気に入りの数は常に4ですか?名前はまったく同じですか(つまり、ドロップダウンリストから選択されていますか?)また、一度に2人のユーザーを比較しただけですか? – Rasika

答えて

4
Select T1.user_id 
    , Count(T2.user_id)/Count(T1.user_id) * 100.0 As PercentMatch 
From user_artist_favorites As T1 
    Left Join user_artist_favorites As T2 
     On T2.artistname = T1.artistname 
      And T2.user_id = 'Tester' 
Where T1.user_id = 'Moonwalker' 
Group By T1.user_id 
Union All 
Select T1.user_id 
    , Count(T2.user_id)/Count(T1.user_id) * 100.0 
From user_artist_favorites As T1 
    Left Join user_artist_favorites As T2 
     On T2.artistname = T1.artistname 
      And T2.user_id = 'Moonwalker' 
Where T1.user_id = 'Tester' 
Group By T1.user_id 

Union Allの最初の部分は、TesterがMoonwalkerのような割合を返します。 2番目のクエリは、MoonwalkerがTesterに似ている割合を返します。

+1

これは2人のユーザーだけを比較しますが、完全なSQLソリューションを考える良いスタートです。 – Rasika

+0

@トーマス:解決に感謝します!私はまだそれを試していないが、それは有望に見えます。 @Rasika - 付与された – moonwalker

+1

。これは、MS SQL ServerのCross Applyが便利な場所です。これにより、ユーザーのペアを選択して、ユニオンのすべてのクエリ内のユーザーを参照することができます。残念ながら、MySQLには私が知っているものと同等のものはありません。 – Thomas

1

あなたができることは、2人のユーザーのアーティスト名でソートされたリストを読んで、一致する歌手の数を数えるためにループを通過することです。索引でアルファベット順に大きいリストを確認し、低い方のリストでポインタを増やす必要があるため、ループは少し複雑になります。

+0

本当に複雑な音。答えをありがとう、私はあなたが提案したものを試してみます。 – moonwalker

関連する問題