无法通过PHP获取多对多MYSQL关系的另一面

时间:2013-11-25 03:51:49

标签: php mysql many-to-many

编辑:DevlshOne解决了重复问题,但我仍然得到了奇怪的数组结果。

如果有人问过这个问题我会道歉。我使用了网站搜索,谷歌,并观看了一些YouTube视频,但我没有发现任何基本的内容,我可以将它应用到我的上下文中。

基本上我有三个表:工具,金属和tool_contains_metal,后者当然是多对多的表。 (我知道这些是奇怪的例子,但我正在尝试构建一个简单的项目来学习数据库绳索)

|----tool ----|
id | name | use

|- tool_contains_metal -|
   tool_id | metal_id

|-- metal -- |
   id | name 

我想使用PHP查询数据库并返回任何给定工具中包含的金属。

我当然有工具类和金属类,到目前为止,我的策略是在查询数据库的金属类中创建一个函数,并返回结果。

这是我目前的查询,在阅读各种帮助文件后拼凑在一起。

SELECT metal.id, metal.name FROM metal
            INNER JOIN tool_contains_metal tool_contains ON metal.id = tool_contains.metal_id
            INNER JOIN tool ON tool_contains.tool_id =1

暂时使用1进行硬编码,因为我知道id为1的工具应该与两种不同的金属相关联。

当我在PHPMyadmin上运行该查询时,它会返回两行...但它会重复12次,共计24次结果。我假设我只是在语法某处。 感谢DevlshOne!但为了完整起见,我将包括我的功能。

public static function find_metals_in_tool($toolId){
    global $database;
    $sql = "SELECT metal.id, metal.name FROM metal
            INNER JOIN tool_contains_metal tool_contains ON metal.id = tool_contains.metal_id
            INNER JOIN tool ON tool_contains.tool_id =1";

    $result_set = $database->query($sql);
    $result_array = mysqli_fetch_array($result_set);
    return $result_array;
}

当我print_r($ result_array)时,它显示一行:     数组([0] => 1 [id] => 1 [1] =>钢铁[名称] =>钢铁) 这似乎不是我想要的。至少应该有两个特定工具的结果。另一个奇怪的是,当我运行echo count($ result_array)时,它会显示4.

无论如何,希望这不是过于冗长,但我认为更多的信息比太少更好。

我非常感谢任何人可以给我的提示/指示。

1 个答案:

答案 0 :(得分:0)

我认为你需要迭代结果试试这个:

$result_set = $database->query($sql);
$return = array();
while($result_array = mysqli_fetch_array($result_set)){
    $return[] = $result_array;
}
return $return;

参考:

Returns an array of strings that corresponds to the fetched row or NULL if there are no more rows in resultset.

http://www.php.net/manual/en/mysqli-result.fetch-array.php