Php “像”这个项目

Php “像”这个项目,php,mysql,database-design,Php,Mysql,Database Design,我正在寻找一些关于如何找到“像”当前项目的一般建议 在我当前的示例中,我有三个这样的表,省略了不相关的数据: games -game_id genres -genre_id genres_data -game_id -genre_id 我如何才能找到与当前游戏有共同类型的游戏,从所有相同类型的游戏,到只有一个相同类型的游戏,当然,只限于游戏中给定行的几行 寻找相似项目的首选方法是什么?试试以下方法: SELECT game_id, COUNT(genre_id) AS genres_in

我正在寻找一些关于如何找到“像”当前项目的一般建议

在我当前的示例中,我有三个这样的表,省略了不相关的数据:

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
 ;
子查询获取与游戏关联的所有流派ID的列表,主查询使用该列表搜索流派数据,以查找与其中一个相匹配的任何记录。换句话说,它搜索与搜索游戏相关联的任何类型的任何游戏

因为一个游戏可以有多种类型,此查询将多次返回同一个游戏id,如果您也在这些记录中报告了类型id,则它们将显示不同的类型id。我们要做的是找到最常见的类型,即按每个游戏id对结果进行分组,我们在主选择中添加countground\u id,以显示在该查询中返回的每个游戏\u id有多少不同的类型\u id

从这里开始,只需按降序排列常见类型的数量,这样就可以首先列出最常见类型的游戏

我还向主查询添加了第二个条件,以将您正在搜索的游戏从结果中排除,否则该游戏将始终具有最多的匹配项,原因显而易见


希望这能有所帮助。

对于单个游戏来说,这样做的方法当然是首先获取其类型,然后循环创建新的查询:

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

  }
您可以为数据库中的每个游戏设置一个循环来执行此操作,然后整理您的结果。目前,我想不出如何在一个查询中做到这一点


我对你的问题也有点不确定,因为你正在寻找最受欢迎的游戏类型,因为这些类型的游戏很可能会被返回为具有相同类型的大多数其他游戏,或者你正在单独寻找与另一个游戏相同的其他游戏ID,这可能更有用。

对不起回答这个问题花了很长时间。StackOverflow在我即将发布这个答案的时候进行了维护。是的,在我发布它之后它就下降了,我后来去看了看,它不见了;谢谢,这是一个很好的起点,我不知道该怎么做