gpt4 book ai didi

php - PDO 循环中的循环 - 如何使其正确?

转载 作者:行者123 更新时间:2023-11-29 11:14:22 25 4
gpt4 key购买 nike

我正在从 MySql_ 和/或 MySqli_ 转向 PDO,并且我需要一些关于如何正确处理事情的建议。 (学习过程)。在这种情况下,我必须循环遍历类别(links_cat)并从另一个表(链接)返回响应此类别的所有记录。我的代码可以工作,但肯定可以改进。我想尽可能专业地做到这一点(也不会变得疯狂......(:只是干净,可靠和快速的代码。提前感谢您的建议。

<?php 

// Get Link Categories
$links_cat = $pdo->prepare("SELECT * FROM links_cat");

$links_categories = array();
if ($links_cat->execute()) {
while ($row = $links_cat->fetch(PDO::FETCH_ASSOC)):
$links_categories[] = $row;
$link_cat_id = $row['id'];
$link_cat_name = $row['name'];
echo $link_cat_name . "<br/>";

// Get Links in current Category

$links = $pdo->prepare("SELECT * FROM links WHERE category = '$link_cat_id' ORDER BY name");
$links->execute();

while ($link_row = $links->fetch()):
echo $link_name = $link_row['name']. "<br/>";
endwhile;

endwhile;
}

$pdo = null;

?>

更新

我加入了表格并返回所有结果,但我只想列出类别一次,而不是每条记录。

<?php 
$links_cat = "SELECT links_cat.name AS linkcat, links.link AS linkname FROM links_cat INNER JOIN links ON links.category=links_cat.id";
foreach($pdo->query($links_cat) as $row) {
echo $row['linkcat'] . "<br>";
echo $row['linkname'] . "<br>";
}
?>

现在的列表是这样的:

Cat 1
- L1
Cat 1
- L2
Cat 2
- L3
Cat 2
- L4

我正在寻找这样的列表:

Cat 1
- L1
- L2
Cat 2
- L3
- L4

最佳答案

尝试像这样更改代码

// ensure record is ordered by category name
$links_cat = "SELECT links_cat.name AS linkcat, links.link AS linkname FROM links_cat INNER JOIN links ON links.category=links_cat.id ORDER BY links_cat.name";

$prevCat = '';
foreach($pdo->query($links_cat) as $row) {
// if category name different from previous, show it
if($row['linkcat'] != $prevCat) {
echo $row['linkcat'] . "<br>";
$prevCat = $row['linkcat'];
}
echo $row['linkname'] . "<br>";
}

SELECT N+1 问题是循环执行 SELECT 查询的代码问题。如果循环计数很高,则会降低性能。之所以称为 SELECT N+1,是因为查询在循环中执行了 N 次,加上初始查询的 1 次。

关于php - PDO 循环中的循环 - 如何使其正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com