如何在 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_genretb_pengarang [在印度尼西亚语中,它是不是意味着“作者”?]) 分别与 tb_buku [我猜,它的意思是“书”?] 根据他们的流派。如果您共享整个 table 结构,它也会更容易理解。但不用担心!我会尽我所能提供帮助:)

所以你有两个解决方案。一种是将整个操作分成两个查询,这将更具可读性和可调试性。二是将它们塞进一个语句中,首先合并 tb_genretb_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!全部都会立即更新。

如果你也需要这方面的帮助,我会在这里 :) 而且我希望我让你更清楚这个问题!