SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.09.2020 15:15:59

Tseka85
Участник
Зарегистрирован: 16.09.2020
Сообщений: 3

Cвязать между собой значение "product_id" и "color" ?

Добрый день , возможно ли через SQL-запрос связать между собой значение  "product_id" и "color"  ? То есть берем из "color" значение 4775 и ставим его в "product_id"  и т.д.  Связать между собой те у которых есть связь с первым 4766

https://i.ibb.co/9YPSWY9/photo-2020-08-19-18-33-51.jpg


Этот product_id 4766 товар Чехол iPhone 5 синий , у него больше 20 разных цветов , их надо связать между собой , чтобы у каждого  Чехол iPhone 5 были в color все остальные цвета . Следующая связь должна быть всех с 4775

https://i.ibb.co/N2TWhvK/photo-2020-08-20-07-36-30.jpg


CREATE TABLE oc_product_color (
 id int(11) NOT NULL AUTO_INCREMENT,
 product_id int(11) NOT NULL,
 color int(11) NOT NULL,
 PRIMARY KEY (id),
 KEY product_id (product_id)
) ENGINE=MyISAM AUTO_INCREMENT=2968 DEFAULT CHARSET=utf8

Отредактированно Tseka85 (16.09.2020 15:24:56)

Неактивен

 

#2 16.09.2020 21:53:29

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

Re: Cвязать между собой значение "product_id" и "color" ?

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

Неактивен

 

#3 18.09.2020 13:50:10

Tseka85
Участник
Зарегистрирован: 16.09.2020
Сообщений: 3

Re: Cвязать между собой значение "product_id" и "color" ?

Приведите небольшой пример тестовых данных в виде insert into oc_product_color ..

К сожалению пока не могу это реализовать в голове .


На первой картинке мы видим , что "product_id" 4766 по очередно привязан к :  4775, 4772, 4769, 4766, 4773, 4774, 4777, 4778, 4780, 4781, 4784, 4785, 4787, 4788, 4789, 4790, 4791, 4792, 4793  через колонку "color" .  По факту все эти данные в колонке "color" тоже "product_id" .
 
  Как используя эти данные можно аналогично поставить "product_id" 4775 , и все остальные 4766, 4772, 4769, 4766, 4773, 4774, 4777, 4778, 4780, 4781, 4784, 4785, 4787, 4788, 4789, 4790, 4791, 4792, 4793 и так по очереди перебрать все в колонке "color"  как представлено на второй картинке?

Отредактированно Tseka85 (18.09.2020 13:51:03)

Неактивен

 

#4 18.09.2020 16:06:16

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

Re: Cвязать между собой значение "product_id" и "color" ?

Если я правильно понял, то

create table test (id int not null auto_increment primary key, a int, b int);

insert into test (a,b) values(1,1),(1,2),(1,4),(11,11),(11,12),(11,13),(11,14);

mysql> select * from test;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |    1 |
|  2 |    1 |    2 |
|  3 |    1 |    4 |
|  4 |   11 |   11 |
|  5 |   11 |   12 |
|  6 |   11 |   13 |
|  7 |   11 |   14 |
+----+------+------+
7 rows in set (0.00 sec)

mysql> select t2.b, t3.b from (select a from test group by a) t1, lateral (select * from test where a=t1.a) as t2, lateral (select * from test where a = t1.a) t3 order by
 1,2;
+------+------+
| b    | b    |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    1 |    4 |
|    2 |    1 |
|    2 |    2 |
|    2 |    4 |
|    4 |    1 |
|    4 |    2 |
|    4 |    4 |
|   11 |   11 |
|   11 |   12 |
|   11 |   13 |
|   11 |   14 |
|   12 |   11 |
|   12 |   12 |
|   12 |   13 |
|   12 |   14 |
|   13 |   11 |
|   13 |   12 |
|   13 |   13 |
|   13 |   14 |
|   14 |   11 |
|   14 |   12 |
|   14 |   13 |
|   14 |   14 |
+------+------+
25 rows in set (0.00 sec)
 

lateral есть только в 8-ой версии

Неактивен

 

#5 18.09.2020 16:31:52

Tseka85
Участник
Зарегистрирован: 16.09.2020
Сообщений: 3

Re: Cвязать между собой значение "product_id" и "color" ?

Ну почти , результат должен быть такой :

+------+------+
| b    | b    |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    1 |    4 |
|    1 |  11 |
|    1 |  12 |
|    1 |  13 |
|    1 |  14 |
|    1 |    1 |
|    1 |    2 |
|    1 |    4 |
|    1 |  11 |
|    1 |  12 |
|    1 |  13 |
|    1 |  14 |
|    2 |    1 |
|    2 |    2 |
|    2 |    4 |
|    2 |  11 |
|    2 |  12 |
|    2 |  13 |
|    2 |  14 |
|    4 |    1 |
|    4 |    2 |
|    4 |    4 |
|    4 |  11 |
|    4 |  12 |
|    4 |  13 |
|    4 |  14 |
|  11 |    1 |
|  11 |    2 |
|  11 |    4 |
|  11 |  11 |
|  11 |  12 |
|  11 |  13 |
|  11 |  14 |
|  12 |    1 |
|  12 |    2 |
|  12 |    4 |
|  12 |  11 |
|  12 |  12 |
|  12 |  13 |
|  12 |  14 |
|  13 |    1 |
|  13 |    2 |
|  13 |    4 |
|  13 |  11 |
|  13 |  12 |
|  13 |  13 |
|  13 |  14 |
|  14 |    1 |
|  14 |    2 |
|  14 |    4 |
|  14 |  11 |
|  14 |  12 |
|  14 |  13 |
|  14 |  14 |
+------+------+

Неактивен

 

#6 18.09.2020 16:34:44

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

Re: Cвязать между собой значение "product_id" и "color" ?

Тогда ещё проще:

mysql> select t1.b, t2.b from test t1, test t2 order by 1,2;
+------+------+
| b    | b    |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    1 |    4 |
|    1 |   11 |
|    1 |   12 |
|    1 |   13 |
|    1 |   14 |
|    2 |    1 |
|    2 |    2 |
|    2 |    4 |
|    2 |   11 |
|    2 |   12 |
|    2 |   13 |
|    2 |   14 |
|    4 |    1 |
|    4 |    2 |
|    4 |    4 |
|    4 |   11 |
|    4 |   12 |
|    4 |   13 |
|    4 |   14 |
|   11 |    1 |
|   11 |    2 |
|   11 |    4 |
|   11 |   11 |
|   11 |   12 |
|   11 |   13 |
|   11 |   14 |
|   12 |    1 |
|   12 |    2 |
|   12 |    4 |
|   12 |   11 |
|   12 |   12 |
|   12 |   13 |
|   12 |   14 |
|   13 |    1 |
|   13 |    2 |
|   13 |    4 |
|   13 |   11 |
|   13 |   12 |
|   13 |   13 |
|   13 |   14 |
|   14 |    1 |
|   14 |    2 |
|   14 |    4 |
|   14 |   11 |
|   14 |   12 |
|   14 |   13 |
|   14 |   14 |
+------+------+
49 rows in set (0.00 sec)

Неактивен

 

Board footer

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