如何使用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从多个表中输出所有数据的主要内容,如果未能解决你的问题,请参考以下文章