2009-12-01 6 views
0

J'ai donc une table de catégories configurée. Dans cette table il y a un champ appelé "id", "name", "fk_parent_cat_id" (et plus). Le "fk_parent_cat_id" lie simplement une catégorie particulière à une catégorie parente.Aide avec une requête DB

Ok. Cela étant dit, comment puis-je faire une requête qui saisit les informations sur la catégorie, mais saisit également les informations sur la catégorie parente. Ma principale préoccupation est que pour le moment je ne fais que saisir l'identifiant parent, ce qui est bien, mais je ne veux pas avoir à lancer une autre requête pour identifier le nom de la catégorie parente.

résultat d'une requête normale serait quelque chose comme:

id: 2 
name: category 1 
fk_parent_cat_id: 1 

Et, je veux que le résultat soit

id: 2 
name: category 1 
fk_parent_cat_id: 1 
fk_parent_cat_name: top category 

Est-ce que cette question a du sens? Je pense qu'il existe un moyen de le faire avec une sorte de jointure ...

Merci pour tout inptut!

Répondre

3

Vous pouvez accomplir ceci avec un INNER JOIN. Assurez-vous simplement que le nom de vos tables et des colonnes de clé étrangère correspond à ce qu'elles sont réellement dans votre base de données (puisque vous n'avez donné aucune information concernant les noms de colonne dans la table ParentCategory). Gardez à l'esprit que si vous avez une seule table de catégories (toutes vos catégories sont stockées dans une seule table), il n'y a rien de mal à se joindre à la même table - vous avez juste besoin d'aliaser les noms des tables dans votre requête. assurez-vous qu'ils ne sont pas ambigus.

SELECT 
    C.id 
, C.name 
, C.category 
, P.parent_cat_name 
FROM 
    ChildCategory C 
INNER JOIN 
    ParentCategory P 
ON 
    C.fk_parent_cat_id = P.parent_cat_id 
+0

cool. Cela devrait fonctionner. C'est une seule table de catégorie btw. Je pense que je dois faire des recherches sur tous les types de jointures existantes. J'ai toujours eu une idée de ce dont il s'agit, juste besoin de commencer à les utiliser maintenant que je crée toutes sortes de bases de données relationnelles avec des tables jointes et autres. – Roeland

0

En admettant que je comprends bien, c'est une jointure de base

SELECT id, fk_parent_cat_id, fk_parent_cat_name 
FROM table, parent_table 
WHERE table.id = parent_table.id; 

Fixer les noms de table avec les bonnes puisque vous ne les avez pas, et cela suppose également que votre clé primaire dans le parent La table s'appelle aussi 'id'.

Si je ne comprends pas bien, corrigez-moi dans un commentaire.

1

Utilisez une jointure automatique dans la requête.

SELECT t.id, t.name, t.fk_parent_cat_id, p.name fk_parent_cat_name 
FROM table t INNER JOIN 
table p on t.fk_parent_cat_id = p.id 
1
SELECT c.id, c.name, c.fk_parent_cat_id, p.name 
FROM category c 
left outer join category p on c.fk_parent_cat_id = p.id