我效率很低吗? mysqli循环调用
Am i being very inefficient ? mysqli call in loop
我有一个包含 2 个 table 的数据库,我在项目 table 中有一个主键(item_id)和一个外键(color_id)。我以颜色作为标题列出了项目,如下所示,
商品详情
//item_id
//color_id
//详情
颜色
//Color_id
//color_suffix
//Color_details
我列出这些项目
颜色后缀(RE)
商品详情
商品详情
商品详情等...
颜色后缀(RT)
商品详情
商品详情
为此,我循环遍历颜色 table 并在每次循环时进行 sql 调用
$query = "SELECT * FROM COLORS";
$result = mysqli_query($connection,$query);
while($data= fetch_array($result)){
echo "<h2>{$data['color_suffix']}</h2>";
$query2 = "SELECT ... FROM items WHERE color_id = {$data['color_id']}";
$result2 = mysqli_query($connection,$query);
while($item = fetch_array($result2)) {
//List all items
}
}
这只是一种 sudo 代码,我只是想知道是否有更有效的方法。
我一直在阅读 SQL 内连接,这是我应该使用的方法吗?
我也阅读了准备好的语句,但老实说,我不太理解其中的语法。
我应该这样做吗?还是效率极低?请记住,将有大约 30 种不同的颜色,然后每种颜色大约有 10 - 50 件商品,因此会有很多 SQL 调用。
有人可以提供一些非常基本的 sudo 代码来帮助我理解我将如何实现这一目标吗?
提前致谢
瑞安
您可以使用简单的内部联接来完成:
SELECT * FROM colors, items WHERE colors.color_id = items.color_id
使用联接。然后为您的分组添加一些逻辑。
$query = "SELECT ... FROM COLORS, ITEMS WHERE items.color_id = colors.color_id order by colors.color_id";
$stmnt = $db->prepare($query);
$stmnt->bind_results($color_id, $color_suffix, ...);
$stmnt->execute();
$cur_col_id = '';
while($stmnt->fetch())
{
if($color_id !== $cur_col_id)
{
echo '<h2>' . $color_suffix . '</h2>';
$cur_col_id = $color_id;
}
//print the items here, no second loop.
}
请记住...不应该只是一个 *,它应该是您将使用的实际字段的列表。该顺序必须与 bind_results 调用中的顺序相匹配。您还应该添加错误检查和处理。
我有一个包含 2 个 table 的数据库,我在项目 table 中有一个主键(item_id)和一个外键(color_id)。我以颜色作为标题列出了项目,如下所示,
商品详情
//item_id
//color_id
//详情
颜色
//Color_id
//color_suffix
//Color_details
我列出这些项目 颜色后缀(RE) 商品详情 商品详情 商品详情等...
颜色后缀(RT) 商品详情 商品详情
为此,我循环遍历颜色 table 并在每次循环时进行 sql 调用
$query = "SELECT * FROM COLORS";
$result = mysqli_query($connection,$query);
while($data= fetch_array($result)){
echo "<h2>{$data['color_suffix']}</h2>";
$query2 = "SELECT ... FROM items WHERE color_id = {$data['color_id']}";
$result2 = mysqli_query($connection,$query);
while($item = fetch_array($result2)) {
//List all items
}
}
这只是一种 sudo 代码,我只是想知道是否有更有效的方法。 我一直在阅读 SQL 内连接,这是我应该使用的方法吗?
我也阅读了准备好的语句,但老实说,我不太理解其中的语法。
我应该这样做吗?还是效率极低?请记住,将有大约 30 种不同的颜色,然后每种颜色大约有 10 - 50 件商品,因此会有很多 SQL 调用。
有人可以提供一些非常基本的 sudo 代码来帮助我理解我将如何实现这一目标吗?
提前致谢 瑞安
您可以使用简单的内部联接来完成:
SELECT * FROM colors, items WHERE colors.color_id = items.color_id
使用联接。然后为您的分组添加一些逻辑。
$query = "SELECT ... FROM COLORS, ITEMS WHERE items.color_id = colors.color_id order by colors.color_id";
$stmnt = $db->prepare($query);
$stmnt->bind_results($color_id, $color_suffix, ...);
$stmnt->execute();
$cur_col_id = '';
while($stmnt->fetch())
{
if($color_id !== $cur_col_id)
{
echo '<h2>' . $color_suffix . '</h2>';
$cur_col_id = $color_id;
}
//print the items here, no second loop.
}
请记住...不应该只是一个 *,它应该是您将使用的实际字段的列表。该顺序必须与 bind_results 调用中的顺序相匹配。您还应该添加错误检查和处理。