【问题标题】:Many-to-many relationship. How do I connect tables?多对多的关系。如何连接表?
【发布时间】:2013-02-11 02:05:05
【问题描述】:

我有一个关于多对多关系的问题。我目前有三个表:

  • 电影
  • 类型
  • 电影类型

在“电影”表中,我有列:

  • id_movie
  • 标题(例如:X 战警)
  • rel_year(发布日期)
  • img_src(显示保存在服务器上的图像。这也是使用php链接到页面的网站上显示的内容)
  • page_link(页面链接...)

在“流派”表中,我有列:

  • id_genre
  • 名称(动作、冒险等...共有 14 种类型)

在“movie_genre”表中我有列:

  • id_movie_genre
  • id_movie
  • id_genre

我希望能够连接这些数据库,以便我可以根据页面按类型对我网站上的数据进行排序。例如,如果我想在“动作”下查看每部电影,我只想显示那些保存在我的数据库中的具有该 ID 的电影。

如何连接我的数据以匹配我的示例?欢迎任何帮助或建议,我对 mySQL 和 php 还是很陌生。

【问题讨论】:

    标签: php mysql database phpmyadmin many-to-many


    【解决方案1】:

    使用连接(一个 SQL 概念)。您应该很快就会对联接非常熟悉。

    SELECT
        *
    FROM
        movie
        NATURAL JOIN movie_genres
        NATURAL JOIN genre
    WHERE
        genre.name = 'Action'
    

    编辑:插入一部电影和三种类型之间的关系:

    INSERT INTO movie_genre
        (movie_id, genre_id)
    VALUES
        (1, 1),
        (1, 2),
        (1, 3),
    

    【讨论】:

    • 因此,如果我想添加一个 'id_movie' 为 '1' 的电影,并给它 'id_genre' 为 '1,2, 和 3'。我只需在 'id_movie' 列中添加 '1' 三次,然后分别分配 '1,2, 和 3' 吗?当我用 php 打印它时,它会知道我指的是哪个标题?对不起,如果这个问题没有意义......
    【解决方案2】:

    在紧要关头,这将加入您的表格。然后您可以使用WHERE 子句限制结果。

    SELECT g.name, m.*
    FROM movie m
    JOIN movie_genre mg ON mg.id_movie = m.id_movie
    JOIN genre g ON g.id_genre = mg.id_genre;
    

    请注意,链接表 (movie_genre) 不应有自己的唯一 ID。它的主键应该是它连接的两个表 ID,仅此而已。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 2018-06-14
      • 2019-08-22
      • 2016-02-18
      • 1970-01-01
      • 2017-09-05
      • 2017-08-08
      • 2015-03-22
      相关资源
      最近更新 更多