Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SQL запросы из двух таблиц / 14 сообщений из 14, страница 1 из 1
23.01.2014, 10:37:23
    #38535267
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Здравствуйте!

Есть две таблицы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `brand_id` int(11) DEFAULT NULL,
  `name` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `params` text COLLATE utf8_unicode_ci,
  `visible` tinyint(1) NOT NULL DEFAULT '1',
  `meta_title` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  `meta_keywords` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  `meta_description` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

INSERT INTO `products` (`id`, `url`, `brand_id`, `name`, `description`, `params`, `visible`, `meta_title`, `meta_keywords`, `meta_description`) VALUES
(1, 'Product1', NULL, 'Продукт 1', NULL, NULL, 1, NULL, NULL, NULL),
(2, 'Product2', NULL, 'Продукт 2', NULL, NULL, 1, NULL, NULL, NULL),
(3, 'Product3', NULL, 'Продукт 3', NULL, NULL, 1, NULL, NULL, NULL),
(4, 'Product4', NULL, 'Продукт 4 ', NULL, NULL, 1, NULL, NULL, NULL),
(5, 'Product5', NULL, 'Продукт 5', NULL, NULL, 1, NULL, NULL, NULL);

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

CREATE TABLE IF NOT EXISTS `img_product` (
  `product_id` int(11) NOT NULL,
  `img` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `param` enum('original','default','big','small') COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `name` (`img`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `img_product` (`product_id`, `img`, `param`) VALUES
(1, 'Картика 1.1', 'default'),
(1, 'Картика 1.3', 'original'),
(1, 'Картика 1.4', 'big'),
(2, 'Картика 2.1', 'big'),
(2, 'Картика 2.2', 'original'),
(2, 'Картика 2.3', 'default'),
(2, 'Картика 2.4', 'small'),
(1, 'Картинка 1.2', 'small'),
(3, 'Картинка 3.1', 'default'),
(3, 'Картинка 3.2', 'original'),
(3, 'Картинка 3.3', 'small'),
(3, 'Картинка 3.4', 'big'),
(4, 'Картинка 4.1', 'big'),
(4, 'Картинка 4.2', 'default'),
(4, 'Картинка 4.3', 'small'),
(4, 'Картинка 4.4', 'original'),
(5, 'Картинка 5.1', 'big'),
(5, 'Картинка 5.2', 'default'),
(5, 'Картинка 5.3', 'small'),
(5, 'Картинка 5.4', 'original');



Хочу вывести все продукты + объеденить картинки с продуктами в одном массив.
Подскажите, пожалуйста, SQL запрос.

P.S. такой не подойдет, ибо он выводит по продуктов и под каждый фотку отдельно
Код: sql
1.
2.
SELECT *,  `img_product`.`img` FROM `products`
          LEFT JOIN `img_product` ON `img_product`.`product_id` = `products`.`id`
...
Рейтинг: 0 / 0
23.01.2014, 10:42:52
    #38535277
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
niko42P.S. такой не подойдет, ибо он выводит по продуктов и под каждый фотку отдельно
Фраза не сильно вменяемая...

Но если исходить из духа, то тебе, вероятно, нужны GROUP BY и GROUP_CONCAT().
...
Рейтинг: 0 / 0
23.01.2014, 10:46:25
    #38535278
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Akina,

К сожалению, GROUP BY не подойет, ибо будет выводить "Продукт 1 == Картинка 1", а надо "Продукт 1 == Картинка 1, картинка 2, картинка 3"
...
Рейтинг: 0 / 0
23.01.2014, 10:49:02
    #38535283
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
niko42Akina,

К сожалению, GROUP BY не подойет, ибо будет выводить "Продукт 1 == Картинка 1", а надо "Продукт 1 == Картинка 1, картинка 2, картинка 3"Наоборот, именно по этому и подойдет.
...
Рейтинг: 0 / 0
23.01.2014, 11:09:45
    #38535311
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
miksoft,

Если делать по такому запросу:
Код: sql
1.
2.
SELECT *,  `img_product`.`img` FROM `products`
          LEFT JOIN `img_product` ON `img_product`.`product_id` = `products`.`id` GROUP BY `id`


То результат действий:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
array(27) { ["id"]=> string(1) "1" [0]=> string(1) "1" ["url"]=> string(8) "Product1" [1]=> string(8) "Product1" ["brand_id"]=> NULL [2]=> NULL ["name"]=> string(16) "Продукт 1" [3]=> string(16) "Продукт 1" ["description"]=> NULL [4]=> NULL ["params"]=> NULL [5]=> NULL ["visible"]=> string(1) "1" [6]=> string(1) "1" ["meta_title"]=> NULL [7]=> NULL ["meta_keywords"]=> NULL [8]=> NULL ["meta_description"]=> NULL [9]=> NULL ["product_id"]=> string(1) "1" [10]=> string(1) "1" ["img"]=> string(18) "Картика 1.1" [11]=> string(18) "Картика 1.1" ["param"]=> string(7) "default" [12]=> string(7) "default" [13]=> string(18) "Картика 1.1" } 


array(27) { ["id"]=> string(1) "2" [0]=> string(1) "2" ["url"]=> string(8) "Product2" [1]=> string(8) "Product2" ["brand_id"]=> NULL [2]=> NULL ["name"]=> string(16) "Продукт 2" [3]=> string(16) "Продукт 2" ["description"]=> NULL [4]=> NULL ["params"]=> NULL [5]=> NULL ["visible"]=> string(1) "1" [6]=> string(1) "1" ["meta_title"]=> NULL [7]=> NULL ["meta_keywords"]=> NULL [8]=> NULL ["meta_description"]=> NULL [9]=> NULL ["product_id"]=> string(1) "2" [10]=> string(1) "2" ["img"]=> string(18) "Картика 2.1" [11]=> string(18) "Картика 2.1" ["param"]=> string(3) "big" [12]=> string(3) "big" [13]=> string(18) "Картика 2.1" } 


array(27) { ["id"]=> string(1) "3" [0]=> string(1) "3" ["url"]=> string(8) "Product3" [1]=> string(8) "Product3" ["brand_id"]=> NULL [2]=> NULL ["name"]=> string(16) "Продукт 3" [3]=> string(16) "Продукт 3" ["description"]=> NULL [4]=> NULL ["params"]=> NULL [5]=> NULL ["visible"]=> string(1) "1" [6]=> string(1) "1" ["meta_title"]=> NULL [7]=> NULL ["meta_keywords"]=> NULL [8]=> NULL ["meta_description"]=> NULL [9]=> NULL ["product_id"]=> string(1) "3" [10]=> string(1) "3" ["img"]=> string(20) "Картинка 3.1" [11]=> string(20) "Картинка 3.1" ["param"]=> string(7) "default" [12]=> string(7) "default" [13]=> string(20) "Картинка 3.1" } 


array(27) { ["id"]=> string(1) "4" [0]=> string(1) "4" ["url"]=> string(8) "Product4" [1]=> string(8) "Product4" ["brand_id"]=> NULL [2]=> NULL ["name"]=> string(17) "Продукт 4 " [3]=> string(17) "Продукт 4 " ["description"]=> NULL [4]=> NULL ["params"]=> NULL [5]=> NULL ["visible"]=> string(1) "1" [6]=> string(1) "1" ["meta_title"]=> NULL [7]=> NULL ["meta_keywords"]=> NULL [8]=> NULL ["meta_description"]=> NULL [9]=> NULL ["product_id"]=> string(1) "4" [10]=> string(1) "4" ["img"]=> string(20) "Картинка 4.1" [11]=> string(20) "Картинка 4.1" ["param"]=> string(3) "big" [12]=> string(3) "big" [13]=> string(20) "Картинка 4.1" } 


array(27) { ["id"]=> string(1) "5" [0]=> string(1) "5" ["url"]=> string(8) "Product5" [1]=> string(8) "Product5" ["brand_id"]=> NULL [2]=> NULL ["name"]=> string(16) "Продукт 5" [3]=> string(16) "Продукт 5" ["description"]=> NULL [4]=> NULL ["params"]=> NULL [5]=> NULL ["visible"]=> string(1) "1" [6]=> string(1) "1" ["meta_title"]=> NULL [7]=> NULL ["meta_keywords"]=> NULL [8]=> NULL ["meta_description"]=> NULL [9]=> NULL ["product_id"]=> string(1) "5" [10]=> string(1) "5" ["img"]=> string(20) "Картинка 5.1" [11]=> string(20) "Картинка 5.1" ["param"]=> string(3) "big" [12]=> string(3) "big" [13]=> string(20) "Картинка 5.1" }



Если мы посмотрим на результат и увидем, что не все выводятся картинки к одному продукту, а у каждого продукта по 5 картинок
...
Рейтинг: 0 / 0
23.01.2014, 11:15:29
    #38535317
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
авторЕсли делать по такому запросу:
и где тут предложенный GROUP_CONCAT
...
Рейтинг: 0 / 0
23.01.2014, 11:20:08
    #38535326
SQL запросы из двух таблиц
niko42,

возьми себе за правило и никогда не отступай от него: если запрос с группировкой, то все поля, упомянутые во фразе SELECT должны быть либо во фразе GROUP BY, либо заключены в агрегатную функцию.
Это поможет избежать нелепостей и логических ошибок, которые ты, похоже, не в состоянии сам заметить.
...
Рейтинг: 0 / 0
23.01.2014, 11:20:09
    #38535327
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Добился чего хотел:
Код: sql
1.
2.
3.
4.
SELECT a.id, GROUP_CONCAT(b.img  SEPARATOR '::') AS img_product
                FROM `products` a
                LEFT JOIN `img_product` b ON a.id = b.product_id
                GROUP BY a.id
...
Рейтинг: 0 / 0
23.01.2014, 11:21:55
    #38535328
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Добрый Э - Эхniko42,

возьми себе за правило и никогда не отступай от него: если запрос с группировкой, то все поля, упомянутые во фразе SELECT должны быть либо во фразе GROUP BY, либо заключены в агрегатную функцию.
Это поможет избежать нелепостей и логических ошибок, которые ты, похоже, не в состоянии сам заметить.

К сожалению, я вообще SQL не знаю - даже документация в глаза не видел
...
Рейтинг: 0 / 0
23.01.2014, 11:23:37
    #38535330
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
niko42даже документация в глаза не виделЭто дело легко поправимо - MySQL 5.5 Reference Manual .
...
Рейтинг: 0 / 0
23.01.2014, 11:31:35
    #38535341
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
miksoftniko42даже документация в глаза не виделЭто дело легко поправимо - MySQL 5.5 Reference Manual .

Спасибо!=)

Ну и последний вопрос, добью я всетки:

Как добавить в запрос параметр (Хочу получить продукт id = 2)
Код: sql
1.
2.
3.
4.
SELECT a.*, GROUP_CONCAT(b.img  SEPARATOR ', ') AS img_product
                FROM `products` a
                LEFT JOIN `img_product` b ON a.id = b.product_id
                GROUP BY a.id
...
Рейтинг: 0 / 0
23.01.2014, 11:33:47
    #38535346
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Код: sql
1.
WHERE id=2
...
Рейтинг: 0 / 0
23.01.2014, 11:35:41
    #38535349
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Добил всётаки:

Код: sql
1.
2.
3.
4.
5.
 SEPARATOR ', ' ) AS img_product
                FROM `products` a
                LEFT JOIN `img_product` b ON a.id = b.product_id
                WHERE a.id = 2
                GROUP BY a.id
...
Рейтинг: 0 / 0
23.01.2014, 11:36:22
    #38535350
niko42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запросы из двух таблиц
Всем большое спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SQL запросы из двух таблиц / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]