如何使用mysqli php从多个表中输出所有数据

Posted

技术标签:

【中文标题】如何使用mysqli php从多个表中输出所有数据【英文标题】:How to output all data from multiple tables using mysqli php 【发布时间】:2019-08-19 03:14:42 【问题描述】:

大部分变量都用我的语言表示,对此感到抱歉。另外请记住,我对 php/mysql 知之甚少,因为即使我的学校老师也不知道它是什么。

在我的数据库中有 4 个表。这些表只有主键。这些表没有任何外键或对其他表的引用。 这是因为在我的学校项目中,我们被告知不要添加外键和引用。这意味着我不能/不知道如何使用JOIN。 目前我正在尝试输出 4 个表中的所有数据,并使用 html/css 将它们输出为 1。

我的主要问题是我不知道如何从不同的行输出数据。

我尝试使用mysqli_data_seek 来选择我的counter($no) 的每一行,但似乎我使用它错误或者它不应该这样做。 我也尝试过使用mysqli_fetch_assoc,但我仍然得到相同的输出。

我已连接到我的数据库

这是代码mysqli_data_seek

<?php

    $row = mysqli_query($connection, "SELECT Kod_Barang, Kod_Rak, Harga, Tarikh_Jual from stok");
    $no = 0;

    if (mysqli_num_rows($row) > 0) 
    while ($stok = mysqli_fetch_assoc($row)) 

        $stok = mysqli_query($connection, "SELECT Kod_Barang, Kod_Rak, Harga, Tarikh_Jual from stok");
        $datastok = mysqli_data_seek($stok, $no);

        //get data from "barang' table
        $barang = mysqli_query($connection, "SELECT Nama_Barang, no_Barang from barang");
        $databarang = mysqli_data_seek($barang, $no);

        //get data from "lokasi"
        $lokasi = mysqli_query($connection, "SELECT Jenis_Barang from lokasi");
        $datalokasi = mysqli_data_seek($lokasi, $no);

        //get data from "tarikh" table
        $tarikh = mysqli_query($connection, "SELECT Tarikh_Beli from tarikh");
        $datatarikh = mysqli_data_seek($tarikh, $no);

        $no++;

然后在此之后,我将有一个输出连接到已经创建的表(这仍在 while 循环中)

    echo '<tr>';
    echo '<td>'.$no.' </td>';
    echo '<td>'.$datastok.'</td>';
    echo '<td>'.$databarang.'</td>';
    echo '<td>'.$datalokasi.'</td>';
    echo '<td>'.$datastok.'</td>';
    echo '<tr>';

这是mysqli_fetch_assoc的代码

<?php

    $rowstok = mysqli_query($connection, "SELECT Kod_Barang, Kod_Rak, Harga, Tarikh_Jual from stok");
    $no = 0;

    if (mysqli_num_rows($rowstok)> 0) 
        while ($stok = mysqli_fetch_assoc($rowstok)) 


            $stok = mysqli_query($connection, "SELECT Kod_Barang, Kod_Rak, Harga, Tarikh_Jual from stok");
            $datastok = mysqli_fetch_assoc($stok);

            //get data from "barang" table
            $barang = mysqli_query($connection, "SELECT Nama_Barang, Bil_Barang from barang");
            $databarang = mysqli_fetch_assoc($barang);

            //get data from "lokasi" table
            $lokasi = mysqli_query($connection, "SELECT Jenis_Barang from lokasi");
            $datalokasi = mysqli_fetch_assoc($lokasi);

            //get data from "tarikh" table
            $tarikh = mysqli_query($connection, "SELECT Tarikh_Beli from tarikh");
            $datatarikh = mysqli_fetch_assoc($tarikh);

            $no++;

这里又是我的输出表

    //output table
    echo '<tr>';
    echo '<td>'.$no.' </td>';
    echo '<td>'.$datastok['Kod_Barang'].'</td>';
    echo '<td>'.$databarang['Nama_Barang'].'</td>';
    echo '<td>'.$datalokasi['Jenis_Barang'].'</td>';
    echo '<td>'.$datastok['Harga'].'</td>';
    echo '<tr>';

现在输出只是根据行数多次显示第一行数据。而且我的counter($no) 增加了 2 (1,3,5,7,....) 不是预期的 1 我试图让它成为每行数据。

【问题讨论】:

你仍然可以在没有显式外键的情况下使用 JOIN,只要每个表中都有值匹配的字段。您现在尝试做的事情非常低效。我不知道为什么学校告诉你不要创建外键,这很倒退。也许,正如你所说,他们不知道自己在做什么。 @ADyson 从我尝试使用 join 我似乎无法适合我的所有数据,因为它说列数不同。你能给我举个例子吗? 首先请 a) 显示您的查询,b) 显示确切的错误消息。我不知道你应该如何写你的加入,因为我不知道你想加入使用哪些字段。我看不到你的桌子设计,别忘了。 @ADyson 我很抱歉,但多亏了你,我决定用 2 个表重试“JOIN”,它工作了,但是一个如何加入多个表?我不确定如何向您展示我的数据库,但如果您不介意,您可以使用任何数据库作为示例 【参考方案1】:

感谢@ADyson,我得到了答案。 我只是将我的长行代码更改为 JOIN

    $data = mysqli_query($connection , "SELECT *
FROM stok
INNER JOIN barang
      ON stok.Kod_Barang=barang.Kod_Barang
INNER JOIN lokasi
      ON stok.Kod_Rak=lokasi.Kod_Rak
INNER JOIN tarikh
      ON barang.Nama_Barang=tarikh.Nama_Barang");

再次对非英语属性表示抱歉。

这是我从另一个问题中学习 JOIN 的地方 SQL Inner join more than two tables

【讨论】:

以上是关于如何使用mysqli php从多个表中输出所有数据的主要内容,如果未能解决你的问题,请参考以下文章

从php向表中插入行时如何修复我的MySQLi数据库

使用 php mysqli 从两个连接的表中获取数据

PHP MYSQLI 查询

MySQLi PHP:使用 MySQLi 检查 SQL INSERT 查询是不是完全成功

如何从PHP中的URL获取多个同名参数并将所有记录插入表中

PHP, mysqli 数组