首页 > 解决方案 > 如何使用mysqli php从多个表中输出所有数据

问题描述

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

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

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

我曾尝试使用mysqli_data_seekmy 选择每一行,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 我试图让它成为每行数据。

标签: phpmysqli

解决方案


感谢@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");

再次对非英语属性感到抱歉。

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


推荐阅读