3 mysql tablolar arasındaki ilişkiler

4 Cevap php

Etkinlikler, sanatçılar ve (sanatçı) açıklamaları: I 3 mysql tablo var. Hepsi de çok-çok ilişki içindedir.

Tablo 'olaylar':

 ID | eventTitle | vb
-----------------------
  1 | event 1    |
  2 | event 2    |
vb

Tablo 'sanatçılar':

 ID | artistName | vb
-----------------------
  1 | artist 1   |
  2 | artist 2   |
vb

Tablo 'açıklamaları':

 ID | artistDesc             | vb
----------------------------------
  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 |
vb

Ayrıca birleşme tabloları events_artists ve artists_desctriptions yaptı. Her ikisi de sadece 2 yabancı anahtarları ve olay, sanatçı ve açıklama kimlikleri birbirine bağlayan sadece hizmet vermektedir.

Benim açıklamaları tablodaki fark - her sanatçının birçok açıklamalar olabilir. Yani aslında her açıklama sadece belirli bir olayın ait olduğu anlamına gelir. =)

Ben böyle bir sorgu yaparsanız:

$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";

I will get all the descriptions for a particular artist. But none of descriptions will be aware which event they belong to... What I want to display to user is something like this:

EVENT 1
artist 1 (artist 1 description 1)
artist 2 (artist 2 description 2)

EVENT 2
artist 3 (artist 3 description 6)
artist 1 (artist 1 description 3)

vb

Should I make a junction table for event-description relation? If I do, I don't know exactly how to use it, uff! =) Or maybe my problem isn't solvable with a simple query? Should I do something with php too? Sorry but I am totally confused =)

Ben düzgün benim sorunum açıklamaya başardı umuyoruz ...

Herhangi bir yardım için şimdiden teşekkür ederiz!

4 Cevap

Eğer events_artists birleştirmek & olmalıdır descriptions tabloları bir olay için sanatçı ve bir açıklama linkler sadece 1 tablo var.

Can you modify the tables you already have? If so, and if each artist description can have only one artist and one event, then I would modify your schema to be:
Table event as is.
Table artists as is.
Table descriptions:

ID | artistDesc                     | artistId | eventId | etc.
------------------------------------------------------------------
 1 | description of artist at event | 4        | 1       | ...

Sonra bir olay için tüm açıklamaları seçebilirsiniz:

$query = "SELECT 
    events.*,artists.*,descriptions.*
    FROM 
    events,artists,descriptions
    WHERE 
    artists.artistID = descriptions.artistID AND 
    events.eventID = descriptions.eventID AND
    events.eventID = $eventIdYouWant";

Ya events.event_name = $eventNameYouWant veya artists.artist_name = $artistNameYouWant bu sorgunun son satırını değiştirebilir ve doğrudan id belirterek sanki aynı şekilde çalışacaktır.

Zaten 3 tablolar arasında onun bir ilişkisi .. söyledi yüzden cevap .. yerine u gibi iki tabloya anda sahip olduğu dalış BİR tablo 1 masa artist_id, event_id ve description_id olması gereken oldukça açık olduğunu düşünüyorum.

I think you should alter your table structure, if you can. It will result in a neater design. Make a table, artist_event_description which contains all the IDs as foreign keys, instead of the two junction tables, it will help you to find out, to which event and artist a description belongs.

Yapabileceğiniz başka bir şey Açıklama tabloda iki sütun, EventID ve ArtistID (bu yabancı anahtarlar olacaktır) içerir ve kavşak tabloları kaldırmaktır. Bu şekilde doğrudan sadece açıklama masanın üzerinde bir SELECT yaparak ihtiyacınız olan tüm bilgileri alırsınız.