SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.08.2014 13:09:46

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Как объединить запрос Новичок! Пожалуйста!

Как записать этот запрос так чтобы их запрос суммировался в одну ячейку?
Перепробовал все что знал и все что подсказали, не получается


(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
 
(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'
)
 

Он у меня суммируется по отдельности вот так
http://s40.radikal.ru/i089/1408/f7/62327ca6587e.jpg

А нужно чтобы они суммировали в одну ячейку Вот так
http://s017.radikal.ru/i419/1408/f6/2d17ea9b0ab0.jpg

Неактивен

 

#2 16.08.2014 13:14:49

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

Попытался различными способами, вот результат:
Несколько неудачных попыток
1 попытка (Попробовал соединить с помощью OR)


SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog OR goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = $category
) AND visible='1'
 


Получил только результат только goods_catalog
http://i081.radikal.ru/1408/64/fe0ec3e1c133t.jpg


2 попытка (Попробовал соединить с помощью AND)


SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog AND goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = $category
) AND visible='1'
 


Получил только результат только goods_catalog1
http://s011.radikal.ru/i318/1408/85/09ea715d83b7t.jpg


3 попытка (Попробовал соединить с помощью обычно (+))


SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE goods_catalog + goods_catalog1 IN
(
SELECT catalog_id FROM catalog WHERE parent_id = $category
) AND visible='1'
 


Получил в результате почему-то не сумму, а разницу (67-9=58)
http://s008.radikal.ru/i305/1408/7c/f1120be3abf9t.jpg


Если получается разница значит может получиться и сумму!
Подскажите как мне их суммировать пожалуйста!

Неактивен

 

#3 16.08.2014 13:24:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить запрос Новичок! Пожалуйста!

select sum(count_rows) from (
(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 all
 
(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'
)
);

Неактивен

 

#4 16.08.2014 14:21:40

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

Пробовал уже
Выдает ошибку
#1248 - Every derived table must have its own alias

Неактивен

 

#5 16.08.2014 14:30:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить запрос Новичок! Пожалуйста!

select sum(count_rows) from (
(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') t1
 
UNION all
 
(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'
) t2
);

Неактивен

 

#6 16.08.2014 15:16:58

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

И снова ошибка
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't2 )' at line 18

Неактивен

 

#7 16.08.2014 15:26:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить запрос Новичок! Пожалуйста!

Да, был не прав

select sum(count_rows) from (

(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 all
 
(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')
) t;

Неактивен

 

#8 16.08.2014 17:04:21

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

Все получилось супер...
Но возникла еще 1 проблема(((

Вот как выглядит мой запрос


-- Основная категория:
(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')
 


Вот что получилось
http://i051.radikal.ru/1408/76/ed779e4cbfdb.jpg


Теперь Подкатегория (Подставил вместо $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')
 


И тут получилось
http://s008.radikal.ru/i303/1408/7e/5bbd69c09790.jpg


И мне подсказали как решить часть проблемы (Суммировать Основные категории и положить в одну ячейку)
Вот функция

SELECT COUNT(goods_id) as count_rows
FROM goods
WHERE (goods_catalog = 405 OR goods_catalog1 = 405)  AND visible='1'
 


Вот результат:
http://s014.radikal.ru/i326/1408/0a/9eac483cb863.jpg

И я попытался провернуть такое же с Подкатегорией но ка вы видели все безуспешно
Нужно чтобы когда в запросе спрашивают "Основную категорию", она выдавало Сумму (Основной категории и Основной категории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')
 

Основная категория работает Отлично
http://s017.radikal.ru/i422/1408/82/05cc7cadc25d.jpg


А теперь тот же запрос только уже подкатегория, вместо $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')
 

Только происходит разница подкатегорий
http://s018.radikal.ru/i513/1408/89/a692beb2c9d3.jpg

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


Прикрепленные файлы:
Attachment Icon vopros.sql, Размер: 256,840 байт, Скачано: 1,011

Неактивен

 

#9 17.08.2014 14:26:13

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

Неужели никто не поможет?

Неактивен

 

#10 17.08.2014 22:45:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить запрос Новичок! Пожалуйста!

"такое же с Подкатегорией" будет иметь вид

(SELECT COUNT(goods_id) AS count_rows
FROM goods
WHERE
(
goods_catalog IN (SELECT catalog_id FROM catalog WHERE parent_id = 405)
or
goods_catalog1 IN (SELECT catalog_id FROM catalog WHERE parent_id = 405)
)
AND visible='1')

Неактивен

 

#11 17.08.2014 22:52:12

devid134
Участник
Зарегистрирован: 16.08.2014
Сообщений: 7

Re: Как объединить запрос Новичок! Пожалуйста!

Уже пробовал, но к сожалению показывает только результат goods_catalog, странно почему не получается

Неактивен

 

#12 22.08.2014 20:06:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как объединить запрос Новичок! Пожалуйста!

Ничего странного: условие на goods_catalog1 не добавляет новых строк к условию на goods_catalog.

Замените
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'

на ранее полученный ответ http://sqlinfo.ru/forum/viewtopic.php?pid=40260#p40260

MariaDB [test]> (SELECT COUNT(goods_id) as count_rows
    -> FROM goods
    -> WHERE (goods_catalog = 404 OR goods_catalog1 = 404)  AND visible='1')
    ->
    -> UNION
    ->
    -> (select sum(count_rows) from (
    ->
    -> (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 all
    ->
    -> (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')
    -> ) t);
+------------+
| count_rows |
+------------+
|          0 |
|         76 |
+------------+
2 rows in set (0.00 sec)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson