通过php在数据库中动态添加外键

通过php在数据库中动态添加外键,php,mysql,database,Php,Mysql,Database,好的,我是php开发新手,所以我犯了一些错误,没有计划我的数据库,因为我对我的第一个项目非常兴奋,所以不要评判我D:D 这是我的主要数据库 主数据库 这是我的电影数据库 电影数据库 所以我首先创建了歌曲数据库并将数据存储在其中,然后我创建了电影数据库,电影id是电影数据库id的外键,所以主数据库中有太多的歌曲需要添加外键,我想要一个php脚本,可以为我在主数据库中插入外键 我创建了一个php脚本(实际上尝试了几个小时),但没有成功 我想 从歌曲数据库中获取电影名称 与电影数据库的电影名称匹配

好的,我是php开发新手,所以我犯了一些错误,没有计划我的数据库,因为我对我的第一个项目非常兴奋,所以不要评判我D:D

这是我的主要数据库 主数据库

这是我的电影数据库

电影数据库

所以我首先创建了歌曲数据库并将数据存储在其中,然后我创建了电影数据库,电影id是电影数据库id的外键,所以主数据库中有太多的歌曲需要添加外键,我想要一个php脚本,可以为我在主数据库中插入外键

我创建了一个php脚本(实际上尝试了几个小时),但没有成功

我想 从歌曲数据库中获取电影名称 与电影数据库的电影名称匹配 如果两部电影都匹配 将电影数据库的id插入歌曲数据库的电影id(外键)

   <?php
    require_once ('../inc/db.php') ?>    

 <?php

     $lang_query = " SELECT * FROM songs";
     $query = "UPDATE songs SET movie_id = '$mov_id'";
     $lang_run = mysqli_query($conn, $lang_query);
     $mov_query = " SELECT * FROM movies";
     $mov_run = mysqli_query($conn, $mov_query);
     $mov_row = 1;
     $lang_row = 1;

     while ($mov_row = mysqli_fetch_array($mov_run))
      {
     $mov_name = $mov_row['movie_name'];
     $mov_id = $mov_row['id'];
     while ($lang_row = mysqli_fetch_array($lang_run))
    {
    echo $movie_name = $lang_row['movie_name'];
    $movie_id = $lang_row['id'];
    if ($movie_name == $mov_name)
        {
        mysqli_query($conn, "UPDATE songs SET movie_id = '$mov_id' where id = '$movie_id'");
        }
    }
} ?>


我认为您可以通过运行以下sql查询来实现这一点-

update *songs* inner join *movies* on songs.movie_name=movies.movie_name set songs.movie_id=movie.id

我认为您可以通过运行以下sql查询来实现这一点-

update *songs* inner join *movies* on songs.movie_name=movies.movie_name set songs.movie_id=movie.id

老实说,我认为,在您担心根据当前模式添加外键之前,您确实需要重新访问模式并规范化数据。为什么两个表中有相同的电影名称和电影片段字段?为什么电影、歌曲、歌手、演员、类别等都在同一张表中?这些东西可能都需要它们自己的相互关联的表

在构建数据库时,请考虑现实世界,因为您可能希望应用程序用户能够在现实世界中与数据库中的数据交互。对我来说,您可能至少需要以下表格:

movies
songs
movies_to_songs (join table to express many-to-many relationship)
actors
movies_to_actors (many-to-many)
editors
movies_to_editors (many-to-many)
movie_categories
movies_to_movie_categories (if you want to treat this as many-to-many)
singers
songs_to_singers (many-to-many)
youtube_videos (a separate table where you could store all video data)
每个表都有额外的列(属性),这些列(属性)只特定于表中包含的类型的单个实体。例如,电影表可能看起来像

id (primary key)
name
slug
image
language
release_date
youtube_id (reference to listing on youtube_videos table)
您可能有一个演员表,如:

id (primary key)
name
... (sex, birthday, etc.)
以及一个movies_to_actors表,该表只有两列和复合主键(即组合必须是唯一的)

在你的各种桌子上等等


请记住考虑一个对象与另一个对象的真实关系以及每个对象的真实属性(列)。

我真诚地认为,在您担心根据当前模式添加外键之前,您确实需要重新访问模式并规范化数据。为什么两个表中有相同的电影名称和电影片段字段?为什么电影、歌曲、歌手、演员、类别等都在同一张表中?这些东西可能都需要它们自己的相互关联的表

在构建数据库时,请考虑现实世界,因为您可能希望应用程序用户能够在现实世界中与数据库中的数据交互。对我来说,您可能至少需要以下表格:

movies
songs
movies_to_songs (join table to express many-to-many relationship)
actors
movies_to_actors (many-to-many)
editors
movies_to_editors (many-to-many)
movie_categories
movies_to_movie_categories (if you want to treat this as many-to-many)
singers
songs_to_singers (many-to-many)
youtube_videos (a separate table where you could store all video data)
每个表都有额外的列(属性),这些列(属性)只特定于表中包含的类型的单个实体。例如,电影表可能看起来像

id (primary key)
name
slug
image
language
release_date
youtube_id (reference to listing on youtube_videos table)
您可能有一个演员表,如:

id (primary key)
name
... (sex, birthday, etc.)
以及一个movies_to_actors表,该表只有两列和复合主键(即组合必须是唯一的)

在你的各种桌子上等等


请记住思考一个对象与另一个对象之间的真实世界关系,以及每个对象的真实世界属性(列)。

哇,非常感谢,我是编程新手……)成功添加电影表后,我将删除这些表..:谢谢你,我是编程新手……)成功添加电影表后,我将删除这些表..:D