如果有人问过这个问题我会道歉。我使用了网站搜索,谷歌,并观看了一些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.
无论如何,希望这不是过于冗长,但我认为更多的信息比太少更好。
我非常感谢任何人可以给我的提示/指示。
答案 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.