2009-02-03 8 views
1

J'ai une table appelée catégorie dans laquelle j'ai des identifiants de catégorie principale et des noms et chaque catégorie principale a sous-catégorie ids et names.i ont aussi une table de produits avec une catégorie colonne id qui a soit un identifiant de sous-catégorie numérique soit un identifiant de catégorie principale à 2 lettres, par exemple: EL pour l'électronique ... mon problème est de savoir comment obtenir les catégories supérieures, c'est-à-dire le nombre de produits dans chaque catégorie par ordre décroissant.mysql requête pour obtenir le compte de chaque élément dans une colonne

category 
{ 
sub_cat_id - numeric 
sub_cat_name - varchar 
main_cat_id - varchar (2 characters) 
main_cat_name 
} 
products 
{ 
categoryid,//this can be either main_cat_id or sub_cat_id 
} 

pls aider ....

+0

j'ai vu exactement la même question ici (mais d'un ID différent): http://stackoverflow.com/questions/506471/mysql-getting-count-of-each-type-of-element-in-a- cloumn – Learning

Répondre

0

s'il n'y a pas de conflit d'espace de noms entre les principaux id catégorie et sous-catégorie id, vous pouvez:

select main_cat_id , count(*) as total 
from category 
where (main_cat_id in (select categoryid from products) 
         OR 
     sub_cat_id in (select categoryid from products) 
     ) 
group by main_cat_id 
order by total desc 

cependant, à première vue, il semble y avoir un problème avec la conception de la table de la catégorie. sub_cat devrait être une table différente avec des contraintes appropriées.

0

On dirait qu'il devrait être droite en avant, vous pouvez poster les déclarations « CREATE TABLE » et quelques lignes d'échantillon (je n'étais pas en mesure de « désosser "the" CREATE TABLE "de votre syntaxe ci-dessus ...)

0

En fait, je ne pense pas que vous pouvez le faire avec une seule requête. En raison de la double nature de la colonne categoryid dans la table products (c'est-à-dire qu'il peut s'agir d'une clé étrangère ou un nom de catégorie), vous devez combiner cette colonne avec la colonne main_cat_id de la table category suite à une jointure, et faites un GROUP BY sur la colonne fusionnée, mais ce n'est pas possible, AFAIK.

Vous pouvez, bien sûr, faire deux requêtes SQL distinctes (une pour compter les produits directement dans les catégories principales, et une autre pour les compter dans les sous-catégories), et combiner leurs résultats avec certains scripts côté serveur.

Questions connexes