【问题标题】:Using JOIN to display data in a table使用 JOIN 在表中显示数据
【发布时间】:2013-08-25 14:59:54
【问题描述】:

感谢您阅读我的问题

我正在尝试使表 repair_jobs 中的 *clients_id* 显示为表 contacts

中的 name

但我没有运气 我有 2 个 sql 查询,这是错的吗?

第一个

$query = "select * from repair_jobs";

这有助于我显示我需要的有关 repair_jobs 和 works 字段的信息

这是第二个

$query = "SELECT repair_jobs.client_id, contacts.name
FROM repair_jobs
INNER JOIN contacts
ON repair_jobs.client_id=contacts.name";

我有这个尝试显示客户的名字

echo "<td>{$client_id}</td>";

但它只显示我需要的数字而不是数据(客户名称)

我错过了什么吗?


其他信息

client_id (repair_jobs) 是一个数字,与 id (contacts) 相同,但要显示名称(contacts)

客户

Id – name – surname – phone – address

维修

Id – clients_id (same as id in clients) – unit – date – price

当前代码

<?php
//include database connection
include 'db_connect.php';

//query all records from the database
$query = "select * from repair_jobs";

//execute the query
$result = $mysqli->query( $query );

//get number of rows returned
$num_results = $result->num_rows;

//this will link us to our add.php to create new record
if( $num_results > 0){ //it means there's already a database record

    //start table
    //creating our table heading
    echo " <table class='table_basic'>";
    echo "<thead><tr>";
        echo "<th>Job #</th>";
        echo "<th>Name Of Unit</th>";
        echo "<th>Client</th>";
        echo "<th>Estimated Value</th>";
    echo "</thead></tr><tbody><tr>";

    //loop to show each records
    while( $row = $result->fetch_assoc() ){
            //extract row
            //this will make $row['firstname'] to
            //just $firstname only
            extract($row);

            //creating new table row per record
            echo "<tr>";
                echo "<td width='40px'><a href='rdetails.php?id={$id}'># {$id}</a></td>";
                echo "<td>{$rmake} {$rmodel}</td>";

$query = "SELECT rj.client_id, c.name AS client_name FROM repair_jobs rj INNER JOIN contacts c ON rj.client_id=c.id";
echo "<td>{$client_name}</td>";

echo '<td align="center"><span class="badge badge-success">£';
$lhours = $labour;
$repaircosts = $ourcosts;
$labourpay = $labourcharge;
$sum_total = $repaircosts +($lhours * $labourpay);




print ($sum_total);
echo '</span></td>';
echo "</td>";
echo "";
    }

    echo "</tr></table>";//end table

}else{
    //if database table is empty
    echo "No records found.";
}

//disconnect from database
$result->free();
$mysqli->close();

?>

【问题讨论】:

  • 我们需要查看表的架构。 contacts.name 是否真的等于 repair_jobs.client_id?还是有更合适的contacts.id
  • 这两行分别命名为client_id(在repair_jobs表中)和name(在contacts表中)
  • 这不是问题所在。这个client_id实际上是一个ID,还是联系人的名字?这是contacts.name 和ID,还是联系人的姓名?如果这两个问题的答案不同,那么你加入了错误的标准就做错了。如果他们相同,你仍然做错了,因为你的命名方案很烂。
  • 对不起,client_id 是一个数字,name 是客户的名字
  • 我已经更新了我的问题,提供了您可能会问的其他信息

标签: php join mysqli


【解决方案1】:

将您的第一个查询更改为您加入查询,因为没有理由在您的代码中间进行第二个查询。 (你也从来没有执行过那个查询)。

//query all records from the database
$query = "SELECT repair_jobs.*, contacts.name as client_name
FROM repair_jobs
INNER JOIN contacts
ON repair_jobs.client_id=contacts.id";

然后在你的表中保留$client_name

echo "<td>{$client_name}</td>";

【讨论】:

  • 他说他希望客户 name 出现在那里。 **但它只显示数字而不是我需要的数据(客户名称)**
  • 查看我的更新答案。只需使用您的连接查询作为您的第一个查询。
【解决方案2】:
<?php
include 'db_connect.php';
$query = "SELECT rj.Id AS job_number, rj.unit, rj.make, rj.model, c.name AS client_name, rj.price FROM repair_jobs rj INNER JOIN contacts c ON rj.clients_id = c.id ORDER BY c.date";
$result = $mysqli->query( $query );
$num_results = $result->num_rows;
if( $num_results > 0){ //it means there's already a database record
    echo " <table class='table_basic'>";
    echo "<thead><tr>";
    echo "<th>Job #</th>";
    echo "<th>Name Of Unit</th>";
    echo "<th>Client</th>";
    echo "<th>Estimated Value</th>";
    echo "</tr></thead><tbody>";
    while( $row = $result->fetch_assoc() ){
        extract($row);
        echo "<tr>";
        echo "<td width='40px'><a href='rdetails.php?id={$job_number}'>#{$job_number}</a></td>";
        echo "<td>{$make} {$model}</td>";
        echo "<td>{$client_name}</td>";
        echo "<td align='center'><span class='badge badge-success'>£";
        $lhours = $labour;
        $repaircosts = $ourcosts;
        $labourpay = $labourcharge;
        $sum_total = $repaircosts +($lhours * $labourpay);
        echo $sum_total;
        echo '</span></td>';
        echo "</td>";
        echo "</tr>";
    }
    echo "</tbody></table>";
} else {
    echo "No records found.";
}
$result->free();
$mysqli->close();
?>

【讨论】:

  • 你用什么来获取行?
  • 感谢您的帮助,但现在我在该代码上遇到语法错误
  • @DevlshOne OP 使用的是mysqli 面向对象的风格,所以使用mysql 程序风格的代码/示例没有意义
  • 这是为您准备的全新代码集...我从未使用过extract,因此您必须仔细检查这些。 rmakermodel 字段之前从未在您的 repair_jobs 表中提及。所以,它可能需要一些调整,但它是没有错误的。
猜你喜欢
  • 1970-01-01
  • 2016-03-25
  • 2018-10-29
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多