SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.09.2014 14:04:38

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Создать двойной запрос

Имеются две таблицы:
1) art_catalog
2) art_products

1)
catalog_id
catalog_name
parent_id
catalog_pic

2)
product_id
product_name
product_pic
catalog_id
product_visible
product_hits
product_new
product_sale
product_price
product_count
product_available
product_img
product_code
product_param1
product_param2
product_param3
product_param4
product_anons
product_description

Необходимо сделать запрос что бы на выходе получить:

catalog_id  -  catalog_name  -  parent_id  -  catalog_pic  -  product_pic

т.е product_pic последнего товара из категории с parent_id

получается что catalog_id номер родительской категории в которой товаров по сути нет, в ней есть лишь дочерние категории с номером parent_id

пробую запрос типа:

SELECT catalog_id, catalog_name, parent_id, catalog_pic FROM art_catalog

(SELECT product_pic FROM art_products WHERE catalog_id IN (SELECT catalog_id FROM art_catalog WHERE parent_id = '1') AND product_visible = '1' ORDER BY product_id DESC LIMIT 1)

собственно как получить желаемый результат?

P.S Благодарю за внимание!

Неактивен

 

#2 01.09.2014 16:02:44

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

Re: Создать двойной запрос

Не понятна постановка задачи. Покажите на примере тестовых данных какой должен быть результат.

Неактивен

 

#3 01.09.2014 20:11:17

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Создать двойной запрос

В общем так, дополнение к предыдущему посту...

имеется таблица art_catalog:

catalog_id                 catalog_name                 parent_id                 catalog_pic

1                                Искусство                        0                       pic1231.jpg

2                              Графика                             1                      pic3423.jpg

3                                  живопись                       1                       pic2324.jpg

4                             сувениры                             0                      pic45645.jpg

5                               игрушки                             4                       pic89789.jpg

6                                керамика                          4                      pic2342342.jpg

так же таблица  art_products

product_id        product_name        product_pic        catalog_id        product_visible      

1                        картина 1        kartina_pic1.jpg         2                        1 
   
2                       картина 2        kartina_pic2.jpg          2                        1   
 
3                      ижображение        kartina1.jpg           3                        1   

4                        изобра           kartina22.jpg              3                        1     

5                        игрушка1           toy1.jpg                5                         1   

6                        игрушка2           toy2.jpg                5                         1   

7                        ваза1           vaza1.jpg                  6                        1   

8                        ваза2           vaza2.jpg                  6                        1

9                        ваза3           vaza3.jpg                  6                        0     

на выходе хотелось бы получить такую таблицу:

catalog_id                 catalog_name                 parent_id                 catalog_pic                 product_pic

1                                Искусство                        0                       pic1231.jpg                       kartina_pic2.jpg

4                               сувениры                             0                      pic45645.jpg                    vaza2.jpg

т.е получить только родителей, и картинку последнего товара доваленного в его подкатегорию(не во все, а просто последний товар добавленный в любую из подкатегорий) при этом  product_visible у товара должен быть 1

Спасибо Вам за Вашу помощь!

Неактивен

 

#4 01.09.2014 21:23:35

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

Re: Создать двойной запрос

SELECT .. FROM
art_catalog t1 JOIN art_catalog t2 ON t1.catalog_id=t2.parent_id
JOIN art_products p ON t2.catalog_id=p.catalog_id
WHERE  t1.parent_id=0 AND p.product_visible=1;

Далее группировка по t1.catalog_id со взятием максимального product_id. Обратите внимание на статью про группировку

Неактивен

 

#5 02.09.2014 15:34:21

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Создать двойной запрос

vasya написал:

SELECT .. FROM
art_catalog t1 JOIN art_catalog t2 ON t1.catalog_id=t2.parent_id
JOIN art_products p ON t2.catalog_id=p.catalog_id
WHERE  t1.parent_id=0 AND p.product_visible=1;

Далее группировка по t1.catalog_id со взятием максимального product_id. Обратите внимание на статью про группировку

Ваш запрос возвращает: MySQL вернула пустой результат (т.е. ноль строк). ( Запрос занял 0.0013 сек. )

Неактивен

 

#6 02.09.2014 15:50:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Создать двойной запрос

А Вы приведите структуру таблиц дамп данных,на которых пустой результат (show create table и insert into).
Как в
http://sqlinfo.ru/forum/viewtopic.php?pid=35669#p35669
или
http://sqlinfo.ru/forum/viewtopic.php?pid=36260#p36260
или
http://sqlinfo.ru/forum/viewtopic.php?pid=20266#p20266
или на худой конец
http://sqlinfo.ru/forum/viewtopic.php?pid=28414#p28414


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 02.09.2014 20:10:24

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Создать двойной запрос

deadka написал:

А Вы приведите структуру таблиц дамп данных,на которых пустой результат (show create table и insert into).
Как в
http://sqlinfo.ru/forum/viewtopic.php?pid=35669#p35669
или
http://sqlinfo.ru/forum/viewtopic.php?pid=36260#p36260
или
http://sqlinfo.ru/forum/viewtopic.php?pid=20266#p20266
или на худой конец
http://sqlinfo.ru/forum/viewtopic.php?pid=28414#p28414


--
-- Структура таблицы `art_catalog`
--

CREATE TABLE IF NOT EXISTS `art_catalog` (
  `catalog_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `catalog_name` varchar(255) NOT NULL,
  `parent_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `catalog_pic` varchar(255) NOT NULL,
  PRIMARY KEY (`catalog_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;

--
-- Дамп данных таблицы `art_catalog`
--

INSERT INTO `art_catalog` (`catalog_id`, `catalog_name`, `parent_id`, `catalog_pic`) VALUES
(1, 'Каталог 1', 0, ''),
(2, 'Каталог 2', 1, ''),
(3, 'Каталог 3', 1, ''),
(4, 'Каталог 4', 0, ''),
(5, 'Каталог 5', 4, ''),
(6, 'Каталог 6', 4, ''),
(7, 'Каталог 7', 4, ''),
(8, 'Каталог 8', 4, ''),
(9, 'Каталог 9', 4, ''),
(10, 'Каталог 10', 4, ''),
(11, 'Каталог 11', 4, ''),
(12, 'Каталог 12', 0, ''),
(13, 'Каталог 13', 12, ''),
(14, 'Каталог 14', 12, ''),
(15, 'Каталог 15', 12, ''),
(16, 'Каталог 16', 12, ''),
(17, 'Каталог 17', 12, ''),
(18, 'Каталог 18', 12, ''),
(19, 'Каталог 19', 0, ''),
(20, 'Каталог 20', 19, ''),
(21, 'Каталог 21', 0, ''),
(22, 'Каталог 22', 21, ''),
(23, 'Каталог 23', 21, ''),
(24, 'Каталог 24', 0, ''),
(25, 'Каталог 25', 24, '');

-- --------------------------------------------------------

--
-- Структура таблицы `art_products`
--

CREATE TABLE IF NOT EXISTS `art_products` (
  `product_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_name` varchar(255) NOT NULL,
  `product_pic` varchar(255) NOT NULL,
  `catalog_id` tinyint(3) unsigned NOT NULL,
  `product_visible` enum('0','1') NOT NULL DEFAULT '1',
  PRIMARY KEY (`product_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

--
-- Дамп данных таблицы `art_products`
--

INSERT INTO `art_products` (`product_id`, `product_name`, `product_pic`, `catalog_id`, `product_visible`) VALUES
(9, 'Продукт 1', 'aseif_0007_realizm__landscape_with_trees__100_120_.jpg', 3, '1'),
(10, 'Продукт 2', 'aseif_0010_expr__motion__90_130_.jpg', 3, '1'),
(11, 'Продукт 3', 'full_IMG_9691.jpg', 13, '1'),
(12, 'Продукт 4', 'IMG_9705.jpg', 13, '1'),
(13, 'Продукт 5', 'IMG_3091.jpg', 6, '1'),
(14, 'Продукт 6', 'ca0020ant19_001.jpg', 17, '1');
 



имеется вот такой вот запроc:

SELECT * FROM
(
    SELECT a.parent_id, MAX( aa.product_id ) AS  'product_id'
        FROM art_catalog a
    JOIN art_products aa ON ( aa.catalog_id = a.catalog_id )
WHERE parent_id <> 0 GROUP BY a.parent_id
)temp
JOIN art_catalog a1 ON ( a1.catalog_id = temp.parent_id )
JOIN art_products a2 ON ( a2.product_id = temp.product_id )
 


результатом его работы возвращает мне все поля таблицы (хотя они мне не нужны, пытался вместо звездочки указать поля но не дает) в общем возвращает родительские категории в подкатегориях которых есть товар, т.е product_pic я получаю последнего добавленного товара в категории, а как быть если родительская категория пуста? нужно чтобы вернулся NULL

хотелось бы на выходе получить такую картину:

`catalog_id`, `catalog_name`, `product_pic`

(1, 'Каталог 1', aseif_0010_expr__motion__90_130_.jpg), (продукт 2)
(4, 'Каталог 4', IMG_3091.jpg), (продукт 5)
(12, 'Каталог 12', IMG_9705.jpg), (продукт 4)
(19, 'Каталог 19', NULL), (продуктов в каталоге нету)
(21, 'Каталог 21', NULL), (продуктов в каталоге нету)
(24, 'Каталог 24', NULL), (продуктов в каталоге нету)
 

Отредактированно saylar_06 (02.09.2014 20:11:05)

Неактивен

 

#8 02.09.2014 21:16:38

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

Re: Создать двойной запрос

SELECT * FROM
(
    SELECT a.parent_id, MAX( aa.product_id ) AS  'product_id'
        FROM art_catalog a
    left JOIN art_products aa ON ( aa.catalog_id = a.catalog_id )
WHERE parent_id <> 0 GROUP BY a.parent_id
)temp
JOIN art_catalog a1 ON ( a1.catalog_id = temp.parent_id )
left JOIN art_products a2 ON ( a2.product_id = temp.product_id );


saylar_06 написал:

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

указывайте полные имена полей
select temp.parent_id as catalog_id, ...

saylar_06 написал:

Ваш запрос возвращает: MySQL вернула пустой результат (т.е. ноль строк). ( Запрос занял 0.0013 сек. )

Это потому, что
   `product_visible` enum('0','1') NOT NULL DEFAULT '1',
соответственно в запросе нужно AND p.product_visible='1';
Зачем вам строковые значения для поля принимающего ноль или единицу?

Неактивен

 

#9 03.09.2014 08:34:27

saylar_06
Участник
Зарегистрирован: 01.09.2014
Сообщений: 13

Re: Создать двойной запрос

Спасибо!

Отредактированно saylar_06 (03.09.2014 08:47:44)

Неактивен

 

Board footer

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