Php 如何将两个表行放在一起
如何同时显示两个表行 我的代码是错误的,它显示空白结果可能是代码中的一些错误,请帮助我解决这个问题 谢谢 我有两张桌子 1) 公寓 2) 合同Php 如何将两个表行放在一起,php,mysql,sql,Php,Mysql,Sql,如何同时显示两个表行 我的代码是错误的,它显示空白结果可能是代码中的一些错误,请帮助我解决这个问题 谢谢 我有两张桌子 1) 公寓 2) 合同 我想要这样的结果 结果 ------------------------------------------ flatno | buildingname| flattype | status | ------------------------------------------ 001 | building1 | Double | r
我想要这样的结果 结果
------------------------------------------
flatno | buildingname| flattype | status |
------------------------------------------
001 | building1 | Double | rent |
002 | building1 | single | rent |
003 | building1 | Double | empty |
004 | building1 | Double | empty |
005 | building2 | Double | rent |
我正在使用这个代码,但它显示的是空白结果
<?php
$dbserver = 'localhost';
$dblogin = 'root';
$dbpassword = '';
$dbname = 'building';
//opening connection
$mysqli = new mysqli($dbserver, $dblogin, $dbpassword, $dbname);
if (mysqli_connect_errno())
{
printf("Connection failed: %s\n", mysqli_connect_error());
exit();
}
function formatMoney($number, $fractional=false) {
if ($fractional) {
$number = sprintf('%.2f', $number);
}
while (true) {
$replaced = preg_replace('/(-?\d+)(\d\d\d)/', '$1,$2', $number);
if ($replaced != $number) {
$number = $replaced;
} else {
break;
}
}
return $number;
}
$a=$_POST['from'];
echo "<div id='non-printable'><table align='center' class='sortable' border='1' cellpadding='10'>";
echo "<tr><th>Flatno</th><th>Buildingname</th><th>floor no</th><th>flatclass</th><th>flattype</th></tr>";
//opening connection
$result = $mysqli->query("SELECT `flatsno`, `buildingname`, `status`, `flattype` FROM `flats` WHERE `flatsno` AND `buildingname` = '$a' ORDER BY `flatsno` ASC") or die($mysqli->error.__LINE__);
while($student = $result->fetch_assoc())
{
$subresult = $mysqli->query("SELECT * FROM `contract` WHERE `flatno` = '".$contract['flatno']."' AND `buildingname` = '$a'") or die($mysqli->error.__LINE__);
if($row = $subresult->fetch_assoc())
{
echo "<tr>";
echo '<td>' . $row['flatsno'] . '</td>';
echo '<td>' . $row['buildingname'] . '</td>';
echo '<td>' . $row['flattype'] . '</td>';
echo '<td>' . $row['status'] . '</td>';
echo "</tr>";
}
else
{
echo "<tr>";
echo '<td>' . $contract['flatno'] . '</td>';
echo '<td>' . $contract['buildingname'] . '</td>';
echo '<td>' . $contract['flattype'] . '</td>';
echo '<td>' . $row['status'] . '</td>';
echo '<td></td>';
echo "</tr>";
}
}
echo '</table>';
mysqli_close($mysqli);
?>
我认为,只有使用下面的选择和循环来迭代结果集,才能解决问题
select f.flatsno, f.buildingname, c.flattype , c.status
from flats f
inner join contract c on (f.flatsno = c.flatsno )
where << tradudor and desired order >>
选择f.flatsno、f.buildingname、c.flattype、c.status
来自f单位
内部连接契约c on(f.flatsno=c.flatsno)
何处>
我希望它是有用的我认为您只需使用1个查询(而不是您当前使用的2个查询)即可获得所需的结果。尝试使用此查询:
SELECT f.flatsno, f.buildingname, IFNULL(c.status,f.status) as status, f.flattype
FROM `flats` f LEFT JOIN `contract` c
ON f.flatsno = c.flatno AND f.buildingname = c.buildingname
WHERE f.buildingname = "building1"
ORDER BY f.flatsno ASC
我认为您要做的是将两个表的数据合并到一个新表中,对吗?
如果没有,无论如何都应该这样做,因为您的数据没有标准化。在大多数情况下,您希望数据库至少具有第三种正常形式。如果你不知道我在说什么,我强烈建议你读一下这个话题 无论如何,您可以通过以下方式实现上述目标:
create table new_table like flats;
insert into new_table
select
f.flatsno, f.buildingname, f.flattype, coalesce(c.status, f.status)
from
flats f
left join contract c on f.flatsno = c.flatno and f.buildingname = c.buildingname;
select * from new_table;
- 现场观看它的工作
SELECT f.flatsno, f.buildingname, IFNULL(c.status,f.status) as status, f.flattype
FROM `flats` f LEFT JOIN `contract` c
ON f.flatsno = c.flatno AND f.buildingname = c.buildingname
WHERE f.buildingname = "building1"
ORDER BY f.flatsno ASC
create table new_table like flats;
insert into new_table
select
f.flatsno, f.buildingname, f.flattype, coalesce(c.status, f.status)
from
flats f
left join contract c on f.flatsno = c.flatno and f.buildingname = c.buildingname;
select * from new_table;