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