如何在 phpmyadmin 中将 2 个以上的表合并为一个
How to combine more than 2 tables to one in phpmyadmin
<?php
include_once("config.php");
$result = mysqli_query($mysqli, "SELECT * FROM tb_buku JOIN tb_genre ON tb_buku.id_genre = tb_genre.id_genre JOIN tb_pengarang ON tb_buku.id_pengarang = tb_pengarang.id_genre");
?>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<a href="add.php">Add New User</a><br/><br/>
<table width='80%' border=1>
<tr>
<th>ID</th> <th>Judul</th> <th>Genre</th> <th>Tahun Terbit</th> <th>Pengarang</th> <th>Update</th>
</tr>
<?php
$no = 1;
while($user_data = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>".$no++."</td>";
echo "<td>".$user_data['judul_buku']."</td>";
echo "<td>".$user_data['nama_genre']."</td>";
echo "<td>".$user_data['tahun_terbit']."</td>";
echo "<td>".$user_data['nama_pengarang']."</td>";
echo "<td><a href='edit.php?id_buku=$user_data[id_buku]'>Edit</a> | <a href='delete.php?id_buku=$user_data[id_buku]'>Delete</a></td></tr>";
}
?>
</table>
</body>
</html>
我目前正在尝试将 2 个表合并为 1 个表以将 ID 同步到所有数据库。我如何将 tb_genre 和 tb_pengarang 组合成 tb_buku?当我这样做时,它给了我一个错误 Uncaught TypeError: mysqli_fetch_array(): Argument #1 ($result) must be of type mysqli_result,
首先,您遇到的错误是因为您的查询。您的查询是一个布尔值 return,我猜它是 returning false,因为缺少错误捕获。我的意思是你需要检查 $result
里面是否有东西:
SELECT * FROM tb_buku JOIN tb_genre ON tb_buku.id_genre = tb_genre.id_genre JOIN tb_pengarang ON tb_buku.id_pengarang = tb_pengarang.id_genre
我真的没弄清楚你的主要目标,我假设是加入两个 tables(tb_genre
和 tb_pengarang
[在印度尼西亚语中,它是不是意味着“作者”?]) 分别与 tb_buku
[我猜,它的意思是“书”?] 根据他们的流派。如果您共享整个 table 结构,它也会更容易理解。但不用担心!我会尽我所能提供帮助:)
所以你有两个解决方案。一种是将整个操作分成两个查询,这将更具可读性和可调试性。二是将它们塞进一个语句中,首先合并 tb_genre
和 tb_pengarang
.
假设您的 table 是这样的:
tb_buku
id_buku
judul_buku
tahun_terbit
buku_id_genre
buku_id_pengarang
1
The Raven
1845
1
1
2
Ulysses
1904
2
2
3
The Lord of The Rings
1954
3
3
4
To Kill a Mockingbird
1960
4
4
5
The Last Day of a Condemned Man
1829
2
5
tb_genre
id_genre
nama_genre
1
Horror
2
Drama
3
Fiction
4
Bildungsroman
tb_pengarang
id_pengarang
nama_pengarang
1
Edgar Allan Poe
2
James Joyce
3
J. R. R. Tolkien
4
Harper Lee
5
Victor Hugo
你需要使用这个查询,我从这个 :
得到了帮助
SELECT judul_buku, nama_genre, tahun_terbit, nama_pengarang, id_buku FROM tb_buku b JOIN tb_genre g on b.id_genre = g.id_genre JOIN tb_pengarang p on b.id_pengarang = p.id_pengarang
代码如下所示:
(...)
<table width='80%' border=1>
<tr>
<th>ID</th> <th>Judul</th> <th>Genre</th> <th>Tahun Terbit</th> <th>Pengarang</th> <th>Update</th>
</tr>
<?php
$no = 1; # You don't need to store this in a variable, as there is id_buku.
$sql = "SELECT judul_buku, nama_genre, tahun_terbit, nama_pengarang, id_buku FROM tb_buku b JOIN tb_genre g on b.id_genre = g.id_genre JOIN tb_pengarang p on b.id_pengarang = p.id_pengarang";
if ($result = mysqli_query($mysqli, $sql) && mysqli_num_rows($result) > 0)
{
while ($user_data = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $no++ . "</td>";
echo "<td>" . $user_data['judul_buku'] . "</td>";
echo "<td>" . $user_data['nama_genre'] . "</td>";
echo "<td>" . $user_data['tahun_terbit'] . "</td>";
echo "<td>" . $user_data['nama_pengarang'] . "</td>";
echo "<td><a href='edit.php?id_buku=$user_data[id_buku]'>Edit</a> | <a href='delete.php?id_buku=$user_data[id_buku]'>Delete</a></td></tr>";
}
}
?>
</table>
(...)
顺便说一下,您不需要使用 $no
变量,因为您可以从数据库中获取您的 ID。此外,当您将 SQL 查询与函数参数分开时,它更具可读性。
希望它能解决您的问题。但无论如何,我想发表一下个人意见。为了提高代码的性能,我的意思是,每次发出这样的列表请求时都避免使用 JOIN 函数,您可以 assemble 所有数据都在一个公共 table 下,在这种情况下将是 tb_daftar_buku (or tb_bibliography)
,它将是所有记录。当你对任何 table 进行操作时,你可以更新主 table 和 puf!全部都会立即更新。
如果你也需要这方面的帮助,我会在这里 :) 而且我希望我让你更清楚这个问题!
<?php
include_once("config.php");
$result = mysqli_query($mysqli, "SELECT * FROM tb_buku JOIN tb_genre ON tb_buku.id_genre = tb_genre.id_genre JOIN tb_pengarang ON tb_buku.id_pengarang = tb_pengarang.id_genre");
?>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<a href="add.php">Add New User</a><br/><br/>
<table width='80%' border=1>
<tr>
<th>ID</th> <th>Judul</th> <th>Genre</th> <th>Tahun Terbit</th> <th>Pengarang</th> <th>Update</th>
</tr>
<?php
$no = 1;
while($user_data = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>".$no++."</td>";
echo "<td>".$user_data['judul_buku']."</td>";
echo "<td>".$user_data['nama_genre']."</td>";
echo "<td>".$user_data['tahun_terbit']."</td>";
echo "<td>".$user_data['nama_pengarang']."</td>";
echo "<td><a href='edit.php?id_buku=$user_data[id_buku]'>Edit</a> | <a href='delete.php?id_buku=$user_data[id_buku]'>Delete</a></td></tr>";
}
?>
</table>
</body>
</html>
我目前正在尝试将 2 个表合并为 1 个表以将 ID 同步到所有数据库。我如何将 tb_genre 和 tb_pengarang 组合成 tb_buku?当我这样做时,它给了我一个错误 Uncaught TypeError: mysqli_fetch_array(): Argument #1 ($result) must be of type mysqli_result,
首先,您遇到的错误是因为您的查询。您的查询是一个布尔值 return,我猜它是 returning false,因为缺少错误捕获。我的意思是你需要检查 $result
里面是否有东西:
SELECT * FROM tb_buku JOIN tb_genre ON tb_buku.id_genre = tb_genre.id_genre JOIN tb_pengarang ON tb_buku.id_pengarang = tb_pengarang.id_genre
我真的没弄清楚你的主要目标,我假设是加入两个 tables(tb_genre
和 tb_pengarang
[在印度尼西亚语中,它是不是意味着“作者”?]) 分别与 tb_buku
[我猜,它的意思是“书”?] 根据他们的流派。如果您共享整个 table 结构,它也会更容易理解。但不用担心!我会尽我所能提供帮助:)
所以你有两个解决方案。一种是将整个操作分成两个查询,这将更具可读性和可调试性。二是将它们塞进一个语句中,首先合并 tb_genre
和 tb_pengarang
.
假设您的 table 是这样的:
tb_buku
id_buku | judul_buku | tahun_terbit | buku_id_genre | buku_id_pengarang |
---|---|---|---|---|
1 | The Raven | 1845 | 1 | 1 |
2 | Ulysses | 1904 | 2 | 2 |
3 | The Lord of The Rings | 1954 | 3 | 3 |
4 | To Kill a Mockingbird | 1960 | 4 | 4 |
5 | The Last Day of a Condemned Man | 1829 | 2 | 5 |
tb_genre
id_genre | nama_genre |
---|---|
1 | Horror |
2 | Drama |
3 | Fiction |
4 | Bildungsroman |
tb_pengarang
id_pengarang | nama_pengarang |
---|---|
1 | Edgar Allan Poe |
2 | James Joyce |
3 | J. R. R. Tolkien |
4 | Harper Lee |
5 | Victor Hugo |
你需要使用这个查询,我从这个
SELECT judul_buku, nama_genre, tahun_terbit, nama_pengarang, id_buku FROM tb_buku b JOIN tb_genre g on b.id_genre = g.id_genre JOIN tb_pengarang p on b.id_pengarang = p.id_pengarang
代码如下所示:
(...)
<table width='80%' border=1>
<tr>
<th>ID</th> <th>Judul</th> <th>Genre</th> <th>Tahun Terbit</th> <th>Pengarang</th> <th>Update</th>
</tr>
<?php
$no = 1; # You don't need to store this in a variable, as there is id_buku.
$sql = "SELECT judul_buku, nama_genre, tahun_terbit, nama_pengarang, id_buku FROM tb_buku b JOIN tb_genre g on b.id_genre = g.id_genre JOIN tb_pengarang p on b.id_pengarang = p.id_pengarang";
if ($result = mysqli_query($mysqli, $sql) && mysqli_num_rows($result) > 0)
{
while ($user_data = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $no++ . "</td>";
echo "<td>" . $user_data['judul_buku'] . "</td>";
echo "<td>" . $user_data['nama_genre'] . "</td>";
echo "<td>" . $user_data['tahun_terbit'] . "</td>";
echo "<td>" . $user_data['nama_pengarang'] . "</td>";
echo "<td><a href='edit.php?id_buku=$user_data[id_buku]'>Edit</a> | <a href='delete.php?id_buku=$user_data[id_buku]'>Delete</a></td></tr>";
}
}
?>
</table>
(...)
顺便说一下,您不需要使用 $no
变量,因为您可以从数据库中获取您的 ID。此外,当您将 SQL 查询与函数参数分开时,它更具可读性。
希望它能解决您的问题。但无论如何,我想发表一下个人意见。为了提高代码的性能,我的意思是,每次发出这样的列表请求时都避免使用 JOIN 函数,您可以 assemble 所有数据都在一个公共 table 下,在这种情况下将是 tb_daftar_buku (or tb_bibliography)
,它将是所有记录。当你对任何 table 进行操作时,你可以更新主 table 和 puf!全部都会立即更新。
如果你也需要这方面的帮助,我会在这里 :) 而且我希望我让你更清楚这个问题!