5

伙计们,我不知道怎么问这个问题,我刚开始学习 PHP 和 Mysql,我在做一些我认为很容易的事情时遇到了很多麻烦。

可以说我在 Mysql Actors 和 Movies 中有两个表。

演员有 ID 和 NAME,电影也有相同的 ID 和 NAME。

在这个例子中,假设我们的演员是 1 Brad Pitt、2 Edward Norton 和 3 Jack Nicholson

电影是 1 Fight Club 和 2 Ocean's 13。

布拉德皮特和爱德华诺顿在搏击俱乐部,布拉德皮特在海洋十三号,杰克尼科尔森不在这些电影中。

如何将演员链接到 Mysql 数据库中的电影,以及如何使用 PHP 显示它们。

我真的很感谢任何帮助,我真的迷失了这个!感谢关注!

4

4 回答 4

3

You can use JOINS for this.

In a brief intro, lets have another table, relations. In that, the movies and the actors are related. The PRIMARY KEY will be the combination of the both IDs.

Actors Table
+----+----------------+
| ID |           NAME |
+----+----------------+
|  1 |      Brad Pitt |
|  2 |  Edward Norton |
|  3 | Jack Nicholson |
+----+----------------+

Movies Table
+----+--------------------+
| ID |               NAME |
+----+--------------------+
|  1 |         Fight Club |
|  2 | Ocean''s Thirteen. |
+----+--------------------+

Now we can have a relationship table with these two IDs.

+-------+-------+
| MOVIE | ACTOR |
+-------+-------+
|     1 |     1 |
|     1 |     2 |
|     2 |     1 |
+-------+-------+

This way, Movie 1 will have both actors 1 and 2.

SQL Queries

CREATE TABLE Actors (`id` int, `name` varchar(255));

INSERT INTO Actors (`id`, `name`) VALUES
(1, 'Brad Pitt'),
(2, 'Edward Norton'),
(3, 'Jack Nicholson');

CREATE TABLE Movies (`id` int, `name` varchar(255));

INSERT INTO Movies (`id`, `name`) VALUES
(1, 'Fight Club'),
(2, 'Ocean''''s Thirteen.');

CREATE TABLE stars (`movie` int, `actor` int);

INSERT INTO RelationShip (`movie`, `actor`) VALUES
(1, 1),
(1, 2),
(2, 1);
于 2012-12-05T18:32:10.877 回答
1

在这种情况下,你有一个多对多的关系,这意味着,一个演员可能在很多电影中,而一部电影可能有很多演员。

在这种情况下,您要做的是生成一个中间表,比如说“MOVIE_ACTOR”,它应该有 2 列 MOVIE_ID 和 ACTOR_ID

这是一个很好的起点

因此,例如,您想知道某个演员的所有电影,您可以进行如下查询:

SELECT movies.name FROM movie_actor LEFT JOIN movies ON movie_actor.movie_id = movies.id
WHERE movie_actor.actor_id = (SELECT id FROM actors WHERE name = 'brad pitt')

这里是你如何创建表 CREATE TABLE MOVIE_ACTOR ( movie_idint, actor_idint);

INSERT INTO MOVIE_ACTOR (`movie`, `actor`) VALUES
(1, 1),
(1, 2),
(2, 1),
(2, 2);

祝你好运!

于 2012-12-05T18:35:42.133 回答
0

你需要一个连接表,ActorMovieMatch

该表将有两个字段ActorIDMovieID,它们是其他表中主键 ID 的外键。

更新数据库时,您将独立于其他表更新此表。

于 2012-12-05T18:33:08.693 回答
0

首先,您需要设置表结构。这是一个可能对你有用的。为了便于阅读,我以图表的形式提供它们;您必须为所有这些创建 MySQL 语句。

首先,您的表格类型:

Movie = ID,Title
Actor = ID,FirstName,LastName
StarredIn = ActorID,MovieID

接下来是表的值:

Movie
------------------
1|Fight Club
2|Ocean's Thirteen

Actor
-------------------
1|Brad|Pitt
2|Edward|Norton
3|Jack|Nicholson

StarredIn
---------
1|1
2|1

请注意您如何简单地插入在 StarredIn 中连接的实体的 ID。这是关系系统的核心和灵魂。跨表分布的数据,通过 ID 连接。这使您可以根据需要多次放置任何演员。它还可以保护您免受诸如名称更改之类的事情的影响,如果有一天 Bradd Pitt 决定要更改他的名字,该 ID 仍然指向同一个实体(您只需修改演员表)。

此外,虽然不是必需的,但您希望主键确保您不添加任何重复项。我推荐电影和演员的 ID 主键和 StarredIn 的复合主键 (ActorID,MovieID)。

至于PHP部分;我建议阅读 mysqli 或 PDO,因为它们会告诉您如何将 PHP 连接到 MySQL。以下是一些帮助您入门的链接:

Mysqli:http ://php.net/manual/en/book.mysqli.php

PDO: http: //php.net/manual/en/book.pdo.php

于 2012-12-05T18:33:14.200 回答