Php 如何将两个表行放在一起

Php 如何将两个表行放在一起,php,mysql,sql,Php,Mysql,Sql,如何同时显示两个表行 我的代码是错误的,它显示空白结果可能是代码中的一些错误,请帮助我解决这个问题 谢谢 我有两张桌子 1) 公寓 2) 合同 我想要这样的结果 结果 ------------------------------------------ flatno | buildingname| flattype | status | ------------------------------------------ 001 | building1 | Double | r

如何同时显示两个表行 我的代码是错误的,它显示空白结果可能是代码中的一些错误,请帮助我解决这个问题

谢谢

我有两张桌子

1) 公寓

2) 合同


我想要这样的结果

结果

------------------------------------------
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;