INSERT,UPDATE,DELETE使用INNERJOIN输入多个标签

时间:2017-03-25 16:01:03

标签: php mysql sql

来自这样的表格

<?php
if(isset($_POST['submit'])){
 $tags = $_POST['tags'];
 ?>
<form method="post">
     <select name="tags" multiple>
          <option>PHP</option>
          <option>HTML</option>
          <option>CSS</option>
     </select>
<button type="submit" name="submit">
</form>

表:

          [     POSTS     ]  [     TAGS   ]  [       POSTS_TAGS       ]
          | id |   title  |  | id |  name |  | id |  post_id |tage_id |
          |----|----------|  |----|-------|  |----|----------|--------|
          | 1  |   PHP7   |  | 1  | PHP   |  | 1  |     1    |    1   |
          | 2  |   HTML   |  | 2  | HTML  |  | 2  |     1    |    2   |
          | 3  |   CSS3   |  | 3  | CSS   |  | 3  |     1    |    3   |
          _________________  ______________  | 4  |     2    |    2   |
                                             | 5  |     2    |    3   |
                                             | 6  |     3    |    3   |
                                             __________________________

如何在POSTS_TAGS表中插入,更新,删除所有options?我也许可以理解如何使用内爆和爆炸插入它,但更新和删除,无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:0)

所以你提到你使用的是phpMyAdmin,它是MySQL数据库的用户界面。如果您尝试使用表单操作该数据库中的记录,则需要将其提交到php脚本,该脚本将运行您要查找的查询。我更新了您的表单以包含帖子标题,并将操作发送到submit.php。您也可以通过其他方式提交表单,但对于此示例,我将坚持使用HTML默认值:

<form method="post" action="submit.php">
     <input type="text" name="title">
     <select name="tags" multiple>
          <option value="1">PHP</option>
          <option value="2">HTML</option>
          <option value="3">CSS</option>
     </select>
     <button type="submit" name="submit">
 </form>

在submit.php中,您将处理表单中的数据并运行您的SQL查询。

<?php
      //connect to mysql 
      $con = mysqli_connect("localhost","user","password","db_name");
      //collect data from form
      $tags = explode(",",$_POST['tags']);
      $title = mysqli_escape_string($_POST['title']);
      //create sql statements
      $sql = "INSERT INTO Posts (title) VALUES ('$title'); SET @pid = LAST_INSERT_ID();";
      // add insert statement for each selected tag
      foreach($tags as $tag){
            $sql .= "INSERT INTO Posts_Tags (post_id,tag_id) VALUES(@pid,".mysqli_escape_string($tag).");";
      }
      // Run the complete query
      $result = mysqli_multi_query($con,$sql);
      if($result){
           //success
      }else{
           //error
      }
 ?>

此代码用于创建和执行包含两个或多个insert语句的查询,这些语句将添加新帖子并关联正确的标记。您可以使用phpMyAdmin测试sql,如下所示:

INSERT INTO Posts (title) VALUES ('Post Title');
SET @pid = LAST_INSERT_ID();
INSERT INTO Posts_Tags (post_id,tag_id) VALUES(@pid,1);
INSERT INTO Posts_Tags (post_id,tag_id) VALUES(@pid,2);

您可以执行类似于处理更新和删除的操作,但是在更新查询的情况下,将需要一些额外的逻辑来测试Posts_Tags中的记录,因为删除了关联,所以需要删除这些记录。删除将非常简单:

DELETE FROM Posts WHERE id = 1; DELETE FROM Posts_Tags WHERE post_id = 1;

您只需要从删除表单提交帖子ID即可创建查询。我希望这有帮助