Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 3个mysql表之间的关系_Php_Sql_Mysql - Fatal编程技术网

Php 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

我有3个mysql表:事件、艺术家和(艺术家)描述。它们都是多对多关系

表“事件”:

 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关系,它们应该在同一个表中。这