2012-09-29 4 views
2

Ok j'ai deux tableauxMYSQL se joindre à une table à une autre table unique plusieurs fois meilleure façon

un est entreprise

id 
name 
telephone 
primary_category 
secondary_category 
tertiary_category 

Une autre table est catégorie

id 
name 
parent_id 

maintenant une entreprise doit avoir une catégorie primaire/secondaire et facultative tertiaire dans ce cas est-ce le seul w ay à ce

SELECT * FROM business b 
INNER JOIN business_category bc_1 ON b.primary_category = bc.id 
INNER JOIN business_category bc_2 ON b.secondary_category = bc.id 
LEFT OUTER JOIN business_category bc_3 ON b.tertiary_category = bc.id 

Semblent assez longtemps pour que tout ce que je veux est le nom de chaque catégorie dans le tableau d'affaires

Répondre

0

Pour autant que je sache, la façon dont vous faites est en ce moment déjà efficace. Vous avez de nombreuses alternatives, comme la création de sous-requêtes, mais c'est moins efficace que celle que vous avez créée.

Si vous avez des index correctement définis sur toutes les tables, alors c'est bon à faire. Plus précisément sur ces colonnes:

primary_category 
secondary_category 
tertiary_category 

parce que ce sont des clés étrangères de la table catégorie.

+0

ne fonctionne pas ce SELECT * FROM affaires b INNER JOIN bc business_category ON b.primary_category = bc.id ET b.secondary_category = bc.id LEFT OUTER JOIN business_category bc_3 SUR b.tertiary_category = bc_3.id –

+0

@MatthewChambers non, c'est très très différent de 'business b INNER JOIN business_category bc_1 ON b.primary_category = bc.id INNER JOIN business_category bc_2 ON b.secondary_category = bc.id' Si vous faites cela, vous aurez des résultats incorrects. vous ne pouvez pas afficher le nom de la catégorie pour la colonne 'secondary_category'. –

+0

ok merci john et ma structure est ok aussi, pas besoin d'une table entre-la pratique est tout à fait acceptable? –

Questions connexes