Отношения между 3 таблицами mysql - PullRequest
1 голос
/ 09 октября 2009

У меня есть 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_artists и artists_desctriptions. Оба они имеют только 2 внешних ключа и служат только для привязки идентификаторов события, артиста и описания.

Обратите внимание на мою таблицу описаний - у каждого художника может быть много описаний. Это фактически означает, что каждое описание относится только к одному конкретному событию. =) * * 1016

Если я сделаю запрос, подобный этому:

$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
художник 3 (художник 3, описание 6)
художник 1 (художник 1, описание 3)

и т.д.

Должен ли я создать соединительную таблицу для описания события? Если я это сделаю, я не знаю точно, как его использовать, уфф! знак равно Или, может быть, моя проблема не решается простым запросом? Должен ли я сделать что-то с php тоже? Извините, но я совершенно сбит с толку =)

Надеюсь, мне удалось правильно объяснить мою проблему ...

Заранее спасибо за любую помощь!

Ответы [ 4 ]

4 голосов
/ 09 октября 2009

Вы должны объединить events_artists & descriptions таблицы, чтобы иметь только 1 таблицу, которая связывает исполнителя с событием и описанием.

2 голосов
/ 09 октября 2009

Можете ли вы изменить таблицы, которые у вас уже есть? Если это так, и если в каждом описании артиста может быть только один артист и одно событие, я бы изменил вашу схему так:
Таблица событий как есть.
Таблица художников как есть.
Описания таблиц:

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_name = $eventNameYouWant, либо на artists.artist_name = $artistNameYouWant, и он будет работать так же, как если бы вы указали идентификатор напрямую.

1 голос
/ 09 октября 2009

Я думаю, что вы должны изменить структуру таблицы, если можете. Это приведет к аккуратному дизайну. Создайте таблицу artist_event_description, которая содержит все идентификаторы как внешние ключи, вместо двух соединительных таблиц, она поможет вам определить, к какому событию и исполнителю относится описание.

Еще одна вещь, которую вы можете сделать, это включить еще два столбца в таблицу Description, eventId и artistId (это будут внешние ключи) и удалить соединительные таблицы. Таким образом, вы напрямую получите всю необходимую информацию, просто выполнив команду SELECT по таблице описания.

1 голос
/ 09 октября 2009

вы уже сказали, что это соотношение между 3 таблицами ... так что я думаю, что ответ довольно очевиден ... вам нужно иметь 1 таблицу artist_id, event_id и description_id в ОДНОЙ таблице вместо того, чтобы разделить ее на две таблицы, как у вас сейчас .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...