作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道,如果你有更聪明的解决方案:
<table>
<thead>
<tr>
<th>Person</th>
<th>Country</th>
<th>Colors</th>
<th>Number</th>
</tr>
</thead>
<tbody>
<?php
$pdo = Database::connect();
$sql = "SELECT * FROM people ORDER BY timestamp ASC;" ;
foreach ($pdo->query($sql) as $row) {
$person = $row['person'];
echo '<tr> ';
echo('<td>'.$person.'</td>');
echo('<td>'.$row['country'].' </td>');
echo('<td>');
$sql2 = "SELECT * FROM features WHERE person = '$person' ORDER BY colors ASC;" ;
foreach ($pdo->query($sql2) as $row) {
echo($row['colors'].'<br>');
}
echo('</td>');
echo('<td>'.$row['Number'].' </td>');
echo '</tr> ';
}
Database::disconnect();
</tbody>
</table>
所以我希望实现的是,在一行中我想显示我的表 features
的所有 colors
与我的表 people 具有相同的人名
:
Person Country Colors Number
===================================
Tom France red 12
green
blue
我知道我这样做的方式不是一个好方法,但我不知道如何用另一种方式来做。因为在我解决它的方式中,我得到了以下结果:
Person Country Colors Number
===================================
Tom France red
green
blue
最佳答案
更改第二个查询的变量名称 ($row
)。它已被覆盖
$sql2 = "SELECT * FROM features WHERE person = '$person' ORDER BY colors ASC;" ;
foreach ($pdo->query($sql2) as $row_sec) {
echo($row_sec['colors'].'<br>');
}
更好的方法是使用 JOIN
在单个查询中获取所有数据。相应地构建数组
或使用GROUP_CONCAT
并打印数据。这个例子是 -
$sql = "SELECT p.*, GROUP_CONCAT(f.colors) colors FROM people
LEFT JOIN features f ON f.person = p.person
GROUP BY p.person
ORDER BY timestamp ASC;" ;
foreach ($pdo->query($sql) as $row) {
echo '<tr> ';
echo('<td>'.$row['person'].'</td>');
echo('<td>'.$row['country'].' </td>');
echo('<td>');
echo(implode('<br/>', explode(',', $row['colors'])));
echo('</td>');
echo('<td>'.$row['number'].' </td>');
echo '</tr> ';
}
关于php - 如何从另一个 mySQL 选择的 foreach 循环内的 mySQL 表中选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31936456/
我是一名优秀的程序员,十分优秀!