以下 PDO 查询返回以下结果:
$db = new PDO('....');
$sth = $db->prepare('SELECT ...');
Run Code Online (Sandbox Code Playgroud)
这些是结果:
name curso
ABC stack
CDE stack
FGH stack
IJK stack
LMN overflow
OPQ overflow
RST overflow
Run Code Online (Sandbox Code Playgroud)
我需要像这样构建 HTML:
<p>stack</p>
ABC<br/>
CDE<br/>
...<br/>
<p>overflow</p>
LMN<br/>
OPQ<br/>
Run Code Online (Sandbox Code Playgroud)
这就是我正在尝试的:
$sth->execute();
//$curso = $sth->fetch();
$id = $sth->fetchColumn(1);
echo "<p>".mb_convert_encoding($id,'utf-8', 'iso-8859-1').'</p>';
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
echo (mb_convert_encoding($row['name'],'utf-8', 'iso-8859-1')).'<br/>';
}
Run Code Online (Sandbox Code Playgroud)
但这是删除每个组的名字,例如:
<p>stack</p>
CDE<br/>
...<br/>
Run Code Online (Sandbox Code Playgroud)
这是一个有趣的问题,因为它不仅涉及到分组结果的常规 PDO 功能,还涉及更棘手的参数组合,可以使整个代码更加流畅:
fetchAll()一次从查询中获取所有结果,而不是手动获取它们。PDO::FETCH_GROUP来对结果进行分组,并将所有实际结果嵌套在子数组中。PDO::FETCH_COLUMN,以在嵌套数组中获得一列!请注意,为了使用PDO::FETCH_GROUP,您必须在第一个位置放置一个要分组的列。所以,像这样改变你的代码
$sth = $db->prepare('SELECT curso, ...');
$sth->execute(...);
$data = $sth->fetchAll(PDO::FETCH_GROUP);
Run Code Online (Sandbox Code Playgroud)
现在你有一个你正在寻找的分组数组!好吧,几乎,因为它将是一个嵌套数组,必须像这样处理
foreach ($data as $curso => $section) {
echo "<p>$curso</p>";
foreach ($section as $row) {
echo $row['name']."<br>";
}
Run Code Online (Sandbox Code Playgroud)
然而,如果您只需要组中的一列,我们可以使用PDO::FETCH_COLUMN, 来获取它,使代码真正流畅:
$data = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_COLUMN);
foreach ($data as $curso => $names) {
echo "<p>$curso</p>";
foreach ($names as $name) {
echo $name."<br>";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |