MySQL запрос, чтобы получить количество каждого элемента в столбце - PullRequest
1 голос
/ 03 февраля 2009

У меня есть таблица с именем category, в которой у меня есть идентификаторы и имена основной категории, и у каждой основной категории есть идентификаторы и имена подкатегорий. У меня также есть таблица продуктов со столбцом идентификатора категории, в которой есть числовой идентификатор подкатегории или Двухбуквенный идентификатор основной категории, например: EL для электроники. Моя проблема в том, как получить верхние категории, т. Е. Количество товаров в каждой категории в порядке убывания.

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 
}

Пожалуйста, помогите ....

Ответы [ 3 ]

0 голосов
/ 03 февраля 2009

На самом деле, я не думаю, что вы можете сделать это с помощью одного запроса. Из-за двойной природы столбца categoryid в таблице products (т.е. это может быть внешний ключ или имя категории), вам придется каким-то образом объединить этот столбец с * 1005. * столбец таблицы category после объединения и введите GROUP BY в объединенном столбце, но это невозможно, AFAIK.

Можно, конечно, выполнить два отдельных запроса SQL (один для подсчета продуктов непосредственно в основных категориях, а другой для подсчета продуктов в подкатегориях) и объединить их результаты с некоторыми сценариями на стороне сервера.

0 голосов
/ 03 февраля 2009

если между идентификатором основной категории и идентификатором подкатегории нет конфликта в пространстве имен, вы можете:

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

однако, prima facie, похоже, есть проблема с дизайном таблицы категорий. sub_cat должен быть другой таблицей с соответствующими ограничениями.

0 голосов
/ 03 февраля 2009

Похоже, что это должно быть просто, можете ли вы опубликовать операторы "CREATE TABLE" и несколько примеров строк (я не смог "реконструировать" "CREATE TABLE" из вашего синтаксиса выше ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...