2010-10-05 9 views
0

J'ai la table dates comme suitMySQL plusieurs variables LEFT JOIN

"dates" "one" "two" "three" "four" 
date1 id1 id2 id3 id4 
date2 id3 id1 id4 id2 

et une seconde table id2name

"ids" "names" 
id1 name1 
id2 name2 
id3 name3 
id4 name4 

J'ai un bloc mental essayer d'écrire

SELECT * FROM dates WHERE `date`='$date' LEFT JOIN `id2name` ON ... 

Qu'est-ce que clause est-ce que je mets ON pour obtenir des noms à la place des ID?

Répondre

3

Votre modèle semble dénormalisé, mais cela devrait vous aider à démarrer:

SELECT 
    d.`date`, 
    i1.names AS name1, 
    i2.names AS name2, 
    ... 
FROM dates d 
LEFT JOIN `id2name` i1 ON (i1.ids = d.one) 
LEFT JOIN `id2name` i2 ON (i2.ids = d.two) 
... 
WHERE `date`='$date' 
+0

Merci! ça fonctionne vraiment! Maintenant, j'ai besoin de comprendre - comment .. – selytch

+0

Aussi, quelle structure proposeriez-vous? Appréciez les réponses! – selytch

+0

@selytch: Le modèle proposé dépend de vos besoins. S'il y a toujours exactement 4 'ids' par' date', et que vous devez les sélectionner comme ceci, votre modèle fonctionnera correctement. Si plus d'identifiants vont venir ('five',' six'), alors vous devez changer votre modèle pour chaque nouveau 'id'. N'hésitez pas à soumettre une autre question expliquant votre modèle et ce dont vous avez besoin. –

0

Pour autant que je sais que vous ne pouvez rejoindre sur un identifiant à la fois de sorte que vous devrez faire une jointure sur chaque colonne qui a ces id