2010-09-08 11 views
1

J'ai une base de données de produits existante pour laquelle j'écris un outil d'administration (en PHP). La base de données contient les éléments suivants « catégories » tableau:sélectionner des catégories avec le nom de parent d'une table

Table Categories 
-------------------- 
PK | id 
FK | parent_id 
    | title 

Maintenant, la clé étrangère « parent_id » contient un identifiant pris de la même table, ou « 0 » si elle est une catégorie supérieure.

Pour créer une vue d'ensemble j'ai besoin maintenant une déclaration mysql qui se traduit par les données suivantes:

id | parent_id | title | parent_title 

Le PARENT_TITLE est là où je n'ai aucune idée. J'ai créé l'instruction suivante:

SELECT 
    c1.id, 
    c1.parent_id, 
    c1.title, 
    c2.title as `parent_title` 
FROM 
    categories c1, 
    categories c2 
WHERE 
    c1.parent_id = c2.id 

Je reçois maintenant seulement toutes les catégories qui ont une catégorie parente.

Devrait être simple, et pourrait avoir déjà répondu ici. Je pense que je n'ai pas trouvé les mots justes à chercher pour le trouver en cherchant des articles existants.

Merci pour votre aide, Daniel

Répondre

2

Vous pouvez utiliser un LEFT OUTER JOIN pour cela:

SELECT c1.id, 
    c1.parent_id, 
    c1.title, 
    c2.title as `parent_title` 
FROM categories c1 
left outer join categories c2 on c1.parent_id = c2.id 
+0

Merci pour votre déclaration sql, c'est ce que j'ai essayé. – dhh

1

Pour vous aider à comprendre les jointures SQL, consultez Jeff Atwood's Visual Guide

+0

Merci beaucoup pour votre lien, je suis toujours coincé en pensant à ces jointures ... je ne sais pas vraiment pourquoi ... – dhh

+0

Ne vous inquiétez pas, ce n'est pas seulement vous. Il y a une raison pour laquelle j'ai ce lien enregistré pour un accès aussi rapide :) –

+0

bon à savoir ;-) – dhh

Questions connexes