如何显示来自不同数据库表的多个名称

时间:2018-12-03 16:01:20

标签: php sql

我正在尝试显示连接到同一表的名称。

有3种不同的数据库表:

  1. 表格
  2. 客人
  3. 信息

首先,我从“表格”中获取数据以获取表格ID。

比起从“信息”表中获得的数据来确定哪些访客已连接到表ID,所以我获得了其ID(可以是多个ID)。

最后,我通过ID获得了每个客人的名字。

我的问题是,我只能获得期望的最终名称,而不能获得连接到同一表的所有名称。

最后一个结果需要显示每个表以及连接到表的每个名称。

PHP:

$sql_e1 = "SELECT `tid` FROM `table`";
$result_e1 = $con->query($sql_e1);
if ($result_e1->num_rows > 0) {
    $i = 0;
    while($row0 = $result_e1->fetch_assoc()) {
        $table_id = $row0['tid'];
        $array[$i]['table_id'] = $table_id;

        $sql_e2 = "SELECT `id` FROM `info` WHERE `tid`='".$table_id."'";
        $result_e2 = $con->query($sql_e2);
        if ($result_e2->num_rows > 0) {
            while($row2 = $result_e2->fetch_assoc()) {
                $guest_id = $row2['id'];
                $array[$i]['guest_id'] = $guest_id;         

                $sql_e3 = "SELECT `name` FROM `guests` WHERE `id`='".$guest_id."'";
                $result_e3 = $con->query($sql_e3);
                if ($result_e3->num_rows > 0) {
                    while($row3 = $result_e3->fetch_assoc()) {
                        $array[$i]['name'] = $row3['name'];
                    } 
                }
            } 
        }                   

        $i++;
    }
}

$counter = 0;

HTML:

<? 
if (isset($i)) {
while ($counter < $i) {
include 'infodialog.php';                           
?>
<div class="<? echo $array[$counter]['table_id']; ?>">
<p><? echo $array[$counter]['name']; ?></p>
</div>
<? 
$counter++;
} } ?>

2 个答案:

答案 0 :(得分:1)

如果要在数组中获得多个名称,则代码应为:

/*
    Consider I am getting uploaded files using AJAX
    but thoses files can be reached using $_FILES['file'].
*/

$ssh2 = ssh2_connect("xxxxxx");

if(ssh2_auth_password($ssh2, 'root', 'xxxxx')) {
    $ftp = ssh2_sftp($ssh2);

    $f = fopen("ssh2.sftp://".intval($ftp)."/ftp/images/img.png", 'w');

    /*
        I wonder if it's possible to write directly the content of the
        file inside $f ? Actually, I am uploading PICTURES. Any Idea ?
    */
}

或者应根据客人的身份证号码

$array[$i]['name'][] = $row3['name'];

这将获得所有名称,但您必须根据数组更改HTML代码。

答案 1 :(得分:0)

除Rohit Rasela之外,另一个解决方案是使用JOINS。从长远来看,JOINS将是更好的解决方案,尤其是当您开始添加大量数据并且速度很重要时。自从我完成PHP和MySQL以来已经有一段时间了,我还没有测试过,但是我相信它应该可以工作:

MySQL:

SELECT
  guests.name as GuestName,
  table.tid as TableId,
  info.id as InfoId 
FROM table AS table 
JOIN info AS info ON info.tid = table.tid
JOIN guests AS guests ON guests .id = info.[guest_id_column_name]

这将为遍历每个表时找到的每个匹配项返回一行,您将可以遍历并访问每个匹配项的GuestName,TableId和InfoId。如果您不关心表ID,可以将其保留在SELECT列表中。如果订单很重要,您可以添加 ORDER BY

HTML循环:

while ($row = $result->fetch_assoc()) {
    <div>Guest name: <php echo $row['GuestName']; ?></div>
    <div>Table Id: <php echo $row['TableId']; ?></div>
    <div>Info Id: <php echo $row['InfoId']; ?></div> 
}

您可以在https://www.w3schools.com/sql/sql_join.asp

上获得有关JOIN的更多信息。