为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用一个表项中的 id 连接另一个表项

如何使用一个表项中的 id 连接另一个表项

PHP
肥皂起泡泡 2022-01-08 17:45:45
我对 php 和 sql 很陌生,并且在创建 Web 应用程序时正在学习,所以我想知道这将如何实现,如果有的话,或者对于这类任务是否有更好的做法。举个例子:假设我有一个有 2 个表的数据库,一个是作者,另一本书author table-----------id | author1 | jones2 | janebook table----------id | title | author1 | Learning php | 1 <- i want this to reference the author from author table2 | Foobar | 13 | How to give a proper high five | 2我有一个表单,它从查询中获取作者姓名作为选择标签,当我提交表单时,我想将 id 分配为 book 表中作者的值$authorQuery = mysqli_query($con, "SELECT * FROM author");<form id="bookForm" action="books.php" method="POST"><label for="title">Book Title</label>        <input type="text" name="title"><label for="author">Author</label>        <select id="author" name="author">                <?php                    while($row = mysqli_fetch_array($authorQuery)) {                                    //display as an array in a drop down list                        echo '<option>' . $row['author'] . '</option>';                            }                ?></form>我该怎么办?
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

我会将选项值设为作者 ID,更改此设置


echo '<option>' . $row['author'] . '</option>';

对此


echo '<option value="' . $row['id']. '">' . htmlspecialchars($row['author']) . '</option>';

现在,当提交此表单时,在服务器上您将在$_POST['author']变量中收到作者的 id ,因此您可以使用 id 而不是作者的姓名进行更新查询。


$query = "update book set author_id = ? where title = ?";

$stmt = $con->prepare($query);

$stmt->bind_param("is", $_POST['author'], $_POST['title']);

$stmt->execute();

建议:

  1. 这个方案意味着你的关系是1:m(1个作者可以写很多书,但是1本书必须只有1个作者写),这是不正确的,因为很多书是由很多作者写的,所以你需要使用第三个连接表来表示多对多关系m:m

  2. 默认情况下,MySQL 上的搜索不区分大小写,但是最好<select>为书籍创建 a而不是将书籍<input>的 ID 分配给<option>s 而不是键入标题(除非您有太多书籍无法放入选择中),因此,当您需要填写表格以将作者分配给一本书时,请确保避免在书名中出现任何拼写错误


查看完整回答
反对 回复 2022-01-08
?
精慕HU

TA贡献1845条经验 获得超8个赞

最简单的方法是


  <?php  $stmt = $conn->prepare("SELECT * from book")

    $stmt->execute();


     foreach($stmt as $row){

    $id = $row['author'];

$stmt = $conn->prepare("SELECT * from author WHERE id='$id'")

    $stmt->execute();

    foreach($stmt as $row){

    $name = $row['author'];

?><option value="<?php echo $name;?>"><?php echo $name;?></option>

    }

    }

复杂方法是


    $stmt = $conn->prepare("SELECT *, book.author AS bookauthor FROM book LEFT JOIN author ON author.id=book.id");

        $stmt->execute();

foreach ($stmt as $row) {

?><option value="<?php echo $row['bookauthor'];?>"><?php echo $row['bookauthor'];?></option>

}


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号