Mysql Как объединить запрос Новичок!

devid134

Новичок
Всем привет!
Нужна помощь
Вот как выглядит мой запрос в целом
Код:
-- Основная категория:
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog = $category AND visible='1')
               
UNION   
-- Подкатегория: 
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog IN
(
SELECT catalog_id FROM catalog WHERE parent_id = $category
) AND visible='1')
UNION
-- Основная категория1:             
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog1 = $category AND visible='1')
UNION
   
-- Подкатегория1: 
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = $category
) AND visible='1')
Как вы уже наверное поняли он работал неправильно, мне нужно чтобы Основная категория суммировалась с Основной категорией1 и Подкатегория с Подкатегория1

Вот что выходило если выбрать допусти Основную категорию (Подставил вместо $category=405(ID Основной категории))

Код:
-- Основная категория:
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog = 405 AND visible='1')
               
UNION   
-- Подкатегория: 
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 405
) AND visible='1')
UNION
-- Основная категория1:             
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog1 = 405 AND visible='1')
UNION
   
-- Подкатегория1: 
(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 405
) AND visible='1')
Вот что получилось


Теперь Подкатегория (Подставил вместо $category=404(Подкатегория))
Код:
-- Основная категория:
(SELECT COUNT(goods_id) AS count_rows
 FROM goods 
WHERE goods_catalog = 404 AND visible='1')
               
UNION    

-- Подкатегория:  
(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE goods_catalog IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 404
) AND visible='1')


UNION


-- Основная категория1:              
(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE goods_catalog1 = 404 AND visible='1')

UNION
     
-- Подкатегория1:  
(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 404
) AND visible='1')
И тут получилось


И мне подсказали как решить часть проблемы (Суммировать Основные категории и положить в одну ячейку)
Вот функция
Код:
SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE (goods_catalog = 405 OR goods_catalog1 = 405)  AND visible='1'
Вот результат:


И я попытался провернуть такое же с Подкатегорией но ка вы видели все безуспешно
Нужно чтобы когда в запросе спрашивают "Основную категорию", она выдавало Сумму (Основной категории и Основной категории1)
А когда в запросе спрашивают "Подкатегорию" , она выдавало Сумму (Подкатегории и Подкатегории1)

Вот попытался соединить запросы подставив для начала вместо $category=405(ID Основной категории)

Код:
(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE (goods_catalog = 405 OR goods_catalog1 = 405)  AND visible='1')

UNION 

(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE goods_catalog + goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 405
) AND visible='1')
Основная категория работает Отлично


А теперь тот же запрос только уже подкатегория, вместо $category=404(ID Подкатегории)
Код:
(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE (goods_catalog = 404 OR goods_catalog1 = 404)  AND visible='1')

UNION 

(SELECT COUNT(goods_id) AS count_rows
FROM goods 
WHERE goods_catalog + goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = 404
) AND visible='1')
Только происходит разница подкатегорий


Как решить эту проблему?
Пожалуйста помогите разобраться неопытному
 

AnrDaemon

Продвинутый новичок
Решить просто.
Начать с того, что выполнить каждый запрос по отдельности без условий. И усложнять запрос до тех пор, пока он выдаёт правильные результаты.
Как только встретили ошибку, значит, вы сделали ошибку в запросе. Вернитесь на шаг назад и найдите её.
 
Сверху