2010-12-12 4 views
0

'현재'와 같은 항목을 찾는 방법에 대한 일반적인 조언을 찾고 있습니다. 나는 모든이 사람에서, 현재의 공통점 장르가 게임을 찾는 것에 대해 갈 수있는 방법'like'this this one

games 
-game_id 

genres 
-genre_id 

genres_data 
-game_id 
-genre_id 

: 내 현재의 예에서

그래서 (생략 관련이없는 데이터)와 같은 세 개의 테이블을 가지고 동일한 장르는 게임에서 주어진 행과 함께 하나의 공통점 (단지 몇 행에 제한됨)을 갖는 것까지 내림차순입니까?

좋아하는 아이템을 찾는 방법은 무엇입니까?

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의 목록을 잡고, 메인 쿼리는 그들 중 하나가 일치하는 모든 레코드를 genres_data를 검색하는 것을 사용

답변

2

이보십시오. 즉, "검색 게임"이 연결된 모든 장르와 관련된 게임을 검색합니다. 게임은 여러 장르를 가질 수 있으므로

,이 쿼리는 같은 game_id 여러 번 반환, 당신은 이러한 기록에 genre_id을보고 한 경우에는 각각 다른 genre_id을 보여줄 것입니다. 가장 공통점이있는 결과를 찾으려면 각 결과를 각각 game_id별로 그룹화하고 SELECTCOUNT(genre_id)을 추가하여 genre_id 개의 각 메시지에 대해 genre_id이 얼마나 많은지를 확인하십시오.

거기에서 공통 장르의 수를 내림차순으로 정렬하면 가장 일반적인 장르의 게임이 먼저 나열됩니다.

메인 쿼리에 두 번째 기준을 추가하여 검색중인 게임을 결과에서 제외 시켰습니다. 그렇지 않으면 분명한 이유 때문에 게임이 항상 가장 많은 일치를 보입니다.

희망이 있습니다. 단지 하나의 게임이 작업을 수행하는

+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); 

    } 

당신은 모든이 작업을 수행하는 루프를 설정할 수 있습니다 게임을 검색 한 다음 결과를 대조하십시오. 나는이 순간에 어떻게 하나의 쿼리에서 이것을 할 수 있을지 생각할 수 없다.

나는 가장 인기있는 장르를 찾고 있거나 (장르가 비슷한 게임이 같은 장르의 가장 많은 게임을 공통적으로 가지고 있기 때문에 반환 될 가능성이 높습니다.) 또는 다른 게임과 공통된 게임의 다른 게임 _ 정보를 개별적으로 찾고있는 것이 더 유용 할 수 있습니다.