2010-12-09 5 views
0

J'ai une requête que j'utilise qui utilise l'ID de plusieurs colonnes qui se réfèrent à une table pour obtenir les informations sur cet ID. Voici le code:MySQL Query plusieurs-à-un rejoindre

SELECT `Events`.EventID, 
     `Events`.AssociationID, 
     `Events`.Association2ID, 
     `Events`.Association3ID, 
     `Events`.Association4ID, 
     `Events`.Association5ID, 
     `Events`.DateFrom, 
     `Events`.DateTo, 
     `Events`.EventName, 
     `Events`.VenueID, 
     `Events`.TestnTune, 
     `Events`.ShownShine, 
     `Events`.SpecialInfo, 
     `Events`.OtherInfo, 
     `Events`.Rating, 
     `Events`.EventOverlay, 
     `Events`.HavePictures, 
     `Events`.IncludeInSchedule, 
     `Events`.EventURL, 
     Associations.Active, 
     Associations.Acronym, 
     Associations.OrgName, 
     Associations.WebURL, 
     Associations.LogoURL, 
     Venues.LocationName, 
     Venues.Location, 
     Venues.longetude, 
     Venues.latitude, 
     Venues.Directions, 
     Venues.SitePros, 
     Venues.SiteCons, 
     Venues.BasicInfo, 
     Venues.SiteRating, 
     Venues.HostedEvents, 
     Venues.CurrentWeather 
    FROM `Events` 
LEFT JOIN Associations ON `Events`.AssociationID = Associations.AssociationID 
         AND `Events`.Association2ID = Associations.AssociationID 
         AND `Events`.Association3ID = Associations.AssociationID 
         AND `Events`.Association4ID = Associations.AssociationID 
         AND `Events`.Association5ID = Associations.AssociationID 
LEFT JOIN Venues ON `Events`.VenueID = Venues.VenueID 
    WHERE `Events`.DateFrom >= NOW() 

Ce que je veux faire est de capturer les informations détaillées sur chaque ID. Je ne peux pas comprendre comment cela est fait. Par exemple:

For Association2ID: 
    Associations.Active, 
    Associations.Acronym, 
    Associations.OrgName, 
    Associations.WebURL, 
    Associations.LogoURL 

For Association3ID 
    Associations.Active, 
    Associations.Acronym, 
    Associations.OrgName, 
    Associations.WebURL, 
    Associations.LogoURL, 
etc. 
+2

Eh bien, vous semble être la sélection de ces colonnes. Qu'est-ce qui ne se passe pas que vous voulez être? Ah je vois que vous devez probablement utiliser 'ou' pas' and' - et une refonte de votre base de données pour le mettre en forme normale! –

+0

Chaque fois que je me trouve tenté d'ajouter un nombre à la fin d'un nom de champ, cela signifie que mon schéma de base de données est faux - si vous avez plus de 1 de tout (y compris les références FK), placez-le dans une nouvelle table! – Basic

Répondre

0

Si vous modifiez le JOIN à

LEFT JOIN Associations ON 
Associations.AssociationID IN (`Events`.AssociationID, 
           `Events`.Association2ID, 
           `Events`.Association3ID, 
           `Events`.Association4ID, 
           `Events`.Association5ID) 

Est-ce améliorer les choses?

Vous devriez probablement envisager de restructurer les choses en first normal form.

Plutôt que d'avoir 5 colonnes réservées à la voie normale du potentiel AssociationID de modélisation de ce nombre à beaucoup id relation d'utiliser une table de jonction avec deux colonnes AssociationID et EventId