2009-08-11 9 views
0

J'ai deux tables: CATEGORY et SUBCATEGORYCompter les enfants dans une autre table pour chaque ligne

Tableau Structure pour CATEGORY

category_id   int(11) 
category_name  varchar(250) 
category_status  enum('0', '1') 

Tableau Structure pour SUBCATEGORY

subcategory_id  int(10) 
subcategory_name varchar(255)  
status    enum('0', '1') 

Par exemple il y a un single CATEGORY nommé .NET et il a des entrées dans SUBCATEGORY comme ASP .NET, VB.NET, C# .NET. Dans ce cas, j'ai besoin d'obtenir le nombre de CATEGORY comme 1 et le nombre de SUBCATEGORY comme 3 en utilisant MySQL.

Comment puis-je accomplir ceci?

+0

Huh? Ceci est déroutant. Veuillez montrer votre schéma de table en utilisant SHOW CREATE TABLE. Voici quelques conseils utiles: http://stackoverflow.com/questions/1204402/how-do-i-ask-for-help-optimizing-fixing-queries-in-mysql – hobodave

+0

Whoa Eric, wtf? Vous semblez être allé un peu à la mer avec les modifications là-bas. Pourquoi avez-vous changé son intro et supprimé le tag débutant? – hobodave

+0

@hobodave: Je pense que la balise 'beginner' est superflue et presque vide de sens. Si vous souhaitez avoir une discussion sur les raisons, dirigez-vous vers Meta. En dehors de cela, j'ai changé la question pour corriger la grammaire. J'ai aussi remarqué que j'ai raté un «je suis», alors je vais changer ça aussi. "Je suis un débutant" n'a vraiment aucune incidence sur la réponse à la question. – Eric

Répondre

3

Eh bien, vous pouvez le faire avec une sous-requête. Cependant, vous devrez ajouter une colonne category_id au tableau subcategory, afin que nous sachions quelles sous-catégories vont avec quelles catégories. Ensuite, vous pouvez obtenir ce que vous voulez avec la requête suivante:

select 
    category_name, 
    1 as CategoryCount, 
    (select count(*) from subcategory where category_id = c.category_id) as SubCategoryCount 
from 
    category c 
+0

C'est exactement ce dont j'ai besoin Eric .. Merci pour votre aide en temps opportun. – Fero

+0

@Fero: Content de vous aider. N'hésitez pas à marquer cela comme la réponse, puisque je suis à -1 en ce moment. Ça aide pour ces Googleurs fous. – Eric

+0

+1 Cette solution fonctionne. Je ne sais pas pourquoi il a été voté plus tôt. –

0
SELECT COUNT(*) FROM CATEGORY; 
SELECT COUNT(*) FROM SUB_CATEGORY; 

Je ne crois pas que ce soit exactement ce que vous allez pour, mais c'est tout ce que vous êtes vraiment va obtenir sans une clé étrangère .

1

Comme on peut supposer le nombre de catégories est un et il est plus que probable une contrainte majeure sur category_id entre les deux tables, cela fonctionnera aussi bien:

select c.category_id, count(c.category_id) 
from category c 
inner join subcategory s on (c.category_id = s.category_id) 
group by c.category_id 
+0

merci pour votre réponse ben .. – Fero

+0

De rien. Vous pouvez voter en cliquant sur la flèche vers le haut située à gauche de chaque réponse. ;) –

+0

son fonctionnement parfait – Fero

Questions connexes