2010-12-12 10 views
0

私は現在のアイテムのようなアイテムを見つける方法についていくつかの一般的なアドバイスを探しています。私はすべて持っているものから、現在のものと共通のジャンルを持っているゲームを見つけることについて行くことができますどのようにアイテム 'like' this one

games 
-game_id 

genres 
-genre_id 

genres_data 
-game_id 
-genre_id 

:私の現在の例では

私はそう(省略して無関係なデータ)のような3つのテーブルを持っています同じジャンルを、ゲームと同じ行しかない(いくつかの行に限定されている)ものと同じものに降下させるか?

どのようなアイテムを見つけるのに適した方法はありますか?

SELECT game_id, COUNT(genre_id) AS genres_in_common 
FROM genres_data 
WHERE 
    genre_id IN 
     (
     SELECT genre_id 
     FROM genres_data 
     WHERE game_id = <game you're searching with> 
     ) 
    AND 
     game_id != <game you're searching with> 
GROUP BY game_id 
ORDER BY genres_in_common DESC 
; 

サブクエリがあなたのゲームに関連するすべてのgenre_idのリストをつかみ、そしてメイン・クエリは、それらの1つに一致するレコードのgenres_dataを検索することを使用しています。

答えて

2

これを試してみてください。つまり、「検索ゲーム」が関連付けられているジャンルに関連付けられているゲームを検索します。

ゲームは複数のジャンルを持つことができるので、このクエリは同じgame_id複数回返します、そして、あなたはまた、彼らはそれぞれ異なるgenre_idを示すであろうこれらのレコードにgenre_idを報告します。最も一般的なものを見つけるには、結果をそれぞれgame_idでグループ化し、にCOUNT(genre_id)を追加して、genre_idの数が、そのクエリで返された各の数を表示するようにします。

そこから、共通ジャンルの数を降順で並べ替えるだけで、最も共通するジャンルのゲームが最初に表示されます。

また、主なクエリに2番目の基準を追加して、検索しているゲームを結果から除外しました。そうでない場合は、明らかに最も多くの一致が見られます。

希望に役立ちます。ちょうど単一のゲームのためにこれを行うには

+0

申し訳ありませんが、私はこれに長い間答えました。この回答を投稿しようとしていたときと同じように、StackOverflowがメンテナンスのためにダウンしました。 – AgentConundrum

+0

私はそれを投稿した直後に落ちた、私はそれを見に行った後、それは行った;これは良い出発点ですので、私はこのようなことについてどうやって行くのか分かりませんでした –

0

確かな方法は、彼らが新しいクエリを作成する上で最初にそのジャンルや、ループをつかむためにある:

$query = "SELECT `genre_id` FROM `genres_data` WHERE `game_id` = 'your_game_id_here';" 
$genre_id_result = mysql_result($query, $dbconn); 
$num = mysql_num_rows($genre_id_result); 

if ($num > 0) { 

    $query = "SELECT `game_id` FROM `games` WHERE "; 

    for ($i=0;$i<$num;$i++) { 

     $genre_id = mysql_result($genre_id_result, $i, "genre_id"); 

     if ($WhereSQL == "") { 
       $WhereSQL = "genre_id = '$genre_id' " 
      } else { 
       $WhereSQL .= "AND genre_id = '$genre_id' " 
      } 
     } 

     $GamesInCommonResult = mysql_result($query . $WhereSQL, $dbconn); 

    } 

あなたはすべてのためにこれを行うためにループを設定できますゲームをデータベースに組み込み、結果を照合します。私は現時点で単一のクエリでこれを行う方法を考えることはできません。

私はまたあなたの質問に少し不確かですが、最も人気のあるジャンルを探しているか(これらのジャンルのゲームは、同じジャンルの他のゲームが共通していると返される可能性が高いです)、他のゲームと共通するゲームの他のgame_idを個別に探している方が便利かもしれません。

関連する問題