Php 3个mysql表之间的关系
我有3个mysql表:事件、艺术家和(艺术家)描述。它们都是多对多关系 表“事件”:Php 3个mysql表之间的关系,php,sql,mysql,Php,Sql,Mysql,我有3个mysql表:事件、艺术家和(艺术家)描述。它们都是多对多关系 表“事件”: ID | eventTitle | etc. ----------------------- 1 | event 1 | 2 | event 2 | etc. 表“艺术家”: ID | artistName | etc. ----------------------- 1 | artist 1 | 2 | artist 2 | etc. 表“说明”: ID | ar
ID | eventTitle | etc.
-----------------------
1 | event 1 |
2 | event 2 |
etc.
表“艺术家”:
ID | artistName | etc.
-----------------------
1 | artist 1 |
2 | artist 2 |
etc.
表“说明”:
ID | artistDesc | etc.
----------------------------------
1 | artist 1 description 1 |
2 | artist 1 description 2 |
3 | artist 2 description 1 |
4 | artist 2 description 2 |
5 | artist 3 description 1 |
etc.
我还制作了连接表events\u artists
和artists\u desctriptions
。它们都只有2个外键,仅用于链接事件、艺术家和描述ID
请注意,在我的描述表中,每个艺术家都可以有许多描述。这实际上意味着每个描述只属于一个特定事件。=)
如果我执行这样的查询:
$q = "SELECT
events.*,artists.*,descriptions.*,events_artists.*,artists_descriptions.*
FROM
events,artists,descriptions,events_artists,artists_descriptions
WHERE
events.eventID = events_artists.eventID AND
events_artists.artistID = artists.artistID AND
artists.artistID = artists_descriptions.artistID AND
artists_descriptions.descID = descriptions.descID";
我会得到一个特定艺术家的所有描述。但是这些描述都不知道它们属于哪个事件。。。
我想向用户显示的内容如下:
$q = "SELECT
events.*,artists.*,descriptions.*,events_artists.*,artists_descriptions.*
FROM
events,artists,descriptions,events_artists,artists_descriptions
WHERE
events.eventID = events_artists.eventID AND
events_artists.artistID = artists.artistID AND
artists.artistID = artists_descriptions.artistID AND
artists_descriptions.descID = descriptions.descID";
事件1艺术家1(艺术家1描述1)
艺术家2(艺术家2描述2) 事件2
艺术家3(艺术家3描述6)
艺人1(艺人1描述3) 等等 我应该为事件描述关系创建连接表吗?如果我这样做了,我就不知道如何使用它,uff!=) 或者我的问题不是通过简单的查询就能解决的?我也应该用php做些什么吗?对不起,我完全糊涂了=) 我希望我能正确地解释我的问题
提前感谢您的帮助 您应该组合
事件\u艺术家
和说明
表格,以便只有一个表格将艺术家链接到事件和说明。您应该组合事件\u艺术家
和说明
表格,以便只有一个表格将艺术家链接到事件和说明。您可以修改表格吗你已经有了?如果是这样,并且如果每个艺术家描述只能有一个艺术家和一个事件,那么我会将您的模式修改为:表事件保持原样。
按原样摆放桌子。
表说明:
ID | artistDesc | artistId | eventId | etc.
------------------------------------------------------------------
1 | description of artist at event | 4 | 1 | ...
然后,您可以使用以下选项选择事件的所有描述:
$query = "SELECT
events.*,artists.*,descriptions.*
FROM
events,artists,descriptions
WHERE
artists.artistID = descriptions.artistID AND
events.eventID = descriptions.eventID AND
events.eventID = $eventIdYouWant";
您可以将该查询的最后一行更改为
events.event\u name=$eventNameYouWant
或artists.artist\u name=$artistNameYouWant
,其工作原理与直接指定id时相同。是否可以修改已有的表?如果是这样,并且如果每个艺术家描述只能有一个艺术家和一个事件,那么我会将您的模式修改为:表事件保持原样。
按原样摆放桌子。
表说明:
ID | artistDesc | artistId | eventId | etc.
------------------------------------------------------------------
1 | description of artist at event | 4 | 1 | ...
然后,您可以使用以下选项选择事件的所有描述:
$query = "SELECT
events.*,artists.*,descriptions.*
FROM
events,artists,descriptions
WHERE
artists.artistID = descriptions.artistID AND
events.eventID = descriptions.eventID AND
events.eventID = $eventIdYouWant";
您可以将该查询的最后一行更改为
events.event\u name=$eventNameYouWant
或artists.artist\u name=$artistNameYouWant
,其工作原理与您直接指定id时相同。您已经说过这是三个表之间的关系。。所以我认为答案很明显。。您需要在一个表中包含一个表艺术家id、事件id和描述id,而不是像您现在这样分为两个表。您已经说过这是三个表之间的关系。。所以我认为答案很明显。。您需要在一个表中包含一个表艺术家id、事件id和描述id,而不是像您现在这样将其分为两个表。如果可以的话,我认为您应该改变您的表结构。
这将导致更整洁的设计。
制作一个表,artist\u event\u description,其中包含作为外键的所有ID,而不是两个连接表,它将帮助您找出描述属于哪个事件和artist
您可以做的另一件事是在描述表中再包含两列eventId和artistId(它们将是外键),并删除连接表。通过这种方式,您只需在描述表上进行选择即可直接获得所需的所有信息。如果可以,我认为您应该更改表结构。 这将导致更整洁的设计。 制作一个表,artist\u event\u description,其中包含作为外键的所有ID,而不是两个连接表,它将帮助您找出描述属于哪个事件和artist
您可以做的另一件事是在描述表中再包含两列eventId和artistId(它们将是外键),并删除连接表。通过这种方式,您只需在描述表上进行选择即可直接获得所需的所有信息。您的意思是更改我的事件\u艺术家表-添加一个引用描述ID的键吗?我的意思是通过添加一个
描述
列作为描述来更改事件\u艺术家
表链接到事件和艺术家。这样,您将只有3个表,说明
&艺术家描述
表不再需要。@najmeddine:您的意思是我应该将我的说明
列直接放在事件艺术家表中,而不是作为ID参考,而是作为文本列(现在在我的说明表中是一个文本列…是的,如果说明和事件始终是1-1关系,它们应该在同一个表中。这将解决您的问题。好的,这听起来很有趣=)我明天一定会尝试,因为现在是凌晨2点…感谢您的帮助,我将报告结果=)你的意思是像更改我的events\u Artisters表-添加一个更多的键来引用descriptionID吗?我的意思是通过添加一个description
列来更改events\u Artisters
表,因为描述同时链接到event和Artister。这样,您将只有3个表,说明
&艺术家描述
表不再需要。@najmeddine:您的意思是我应该将我的说明
列直接放在事件艺术家表中,而不是作为ID参考,而是作为文本列(它现在是我的说明表中的一个文本列…是的,如果说明和事件始终是1-1关系,它们应该在同一个表中。这