我正在努力使用while循环从表b中获取相应的值。我的数据库中有以下数据:
表A
编号-实体
3000-ent1
3010-ent1
4000-ent1
表B
编号-实体
3000-10
3010-10
3010-20
4000-20
3000-30
4000-30
现在,我需要数据来输出下表,其中第一列来自表a,下一列来自表b:
ent1-10-20-30
3000-3000-空-3000
3010-3010-3010-null
4000-空-4000-4000
我尝试组合两个WHILE循环,但没有成功:
$query_entity = "SELECT number, entity FROM table_a ORDER BY number ASC";
$result_entity = mysqli_query($mysqli, $query_entity);
while ($entities = mysqli_fetch_array($result_entity)) {
$entitiesAccount = $entities['number'];
$query_entity_tabtwo = "SELECT number, entity
FROM table_b
WHERE number = $entitiesAccount";
$result_entity_tabtwo = mysqli_query($mysqli, $query_entity_tabtwo);
while ($entities_tabtwo = mysqli_fetch_array($result_entity_tabtwo)) {
echo $entitiesAccount . " - " . $entities_tabtwo['number'];
}
}
我得到的结果不是我上面想要的结果,因为该结果没有分隔表b中的“实体”字段。如何更改脚本以获得所需的结果?
答案 0 :(得分:0)
您只需要在稍微不同的地方回声
$sql = "SELECT number, entity
FROM table_a
ORDER BY number ASC";
$result = mysqli_query($mysqli, $sql);
while ($row = mysqli_fetch_array($result_entity)) {
$entitiesAccount = $row['number'];
$sql = "SELECT number, entity
FROM table_b
WHERE number = $entitiesAccount";
$result2 = mysqli_query($mysqli, $sql);
echo $entitiesAccount;
while ($row2 = mysqli_fetch_array($result2)) {
echo " - " . $row2['number'];
}
echo '<br>';
}
答案 1 :(得分:0)
提示:这是JOINS与我们一起努力的地方。 BA DUM TSSSS
您可以使用ANSI syntax or the traditional where clause,它们的工作原理相同。
就您而言,您可以编写类似的内容。
SELECT ta.number, tb.entity
FROM tableA as ta
LEFT JOIN tableB as tb ON tb.number = ta.number
WHERE ta.entity = 'ent1'; // I suppose this is where you do the selection
现在您拥有来自tableA的所有行以及来自tableB的相关行
并假设您已在名为.... umm .... $result
的数组变量中获取了所有结果。
现在,您只需要在php中隐喻巧手即可,如下所示...
<?php
$result = []; // This comes from the mysql
$output = [];
$columns_raw = [];
$entity_name = 'ent1'; // This comes from your selection logic the same that goes to sql.
foreach ($result as $row) {
$columns_raw[] = $row['entity'];
$output[$row['number']][$row['entity']][] = $row;
}
$columns = array_unique($columns_raw);
?>
我也给您写一点HTML。
<table>
<thead>
<th><?php echo $entity_name; ?></th>
<?php foreach ($columns as $column) { ?>
<th><?php echo $column; ?></th>
<?php } ?>
</thead>
<tbody>
<?php foreach ($output as $number => $row) { ?>
<tr><?php echo $number; ?></tr>
<tr><?php
foreach ($columns as $column) {
if (array_key_exists($column, $row)) {
echo $number;
} else {
echo 'null';
}
}
?></tr>
<?php } ?>
</tbody>
</table>
...还有瞧!
注意:-这完全可以称为“盲代码”,而我没有运行它。但这足以将您指向正确的方向。
答案 2 :(得分:0)
您可以在一个查询中完全生成数据。这样,您可以将PHP简化为一个while
循环:
SELECT a.number AS ent1,
GROUP_CONCAT(CASE WHEN b.entity = 10 THEN b.number END) AS `10`,
GROUP_CONCAT(CASE WHEN b.entity = 20 THEN b.number END) AS `20`,
GROUP_CONCAT(CASE WHEN b.entity = 30 THEN b.number END) AS `30`
FROM table_a a
JOIN table_b b ON b.number = a.number
GROUP BY ent1
输出:
ent1 10 20 30
3000 3000 (null) 3000
3010 3010 3010 (null)
4000 (null) 4000 4000