通过PHP获取多对多MYSQL关系的另一面时遇到困难


Having trouble fetching the other side of a many-to-many MYSQL relationship via PHP

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

如果有人提出并回答了这个问题,我深表歉意。我使用了网站搜索、谷歌,并观看了一些YouTube视频,但我没有找到任何基本的东西来将其应用于我的上下文。

本质上,我有三个表:tool、metal和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;
}

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

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

我真的很感激任何人能给我的提示/建议。

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

$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