Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с запросом / 13 сообщений из 13, страница 1 из 1
17.11.2017, 12:33
    #39555022
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Есть такой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
if(count($data)) {
			foreach($data as $r) {
				$this->_db->setQuery("SELECT product_id
	                              FROM #__jshopping_products
	                              WHERE product_ean=" . $this->_db->Quote($r->sku));
				$related_id = $this->_db->loadResult();
				if($related_id) {
					$this->_db->setQuery("INSERT INTO #__jshopping_products_relations SET product_id = '{$r->product_id}', product_related_id = '$related_id'");
					$this->_db->Query();
				}
				else{
					echo JText :: _('SKU_NOT_FOUND') . ":$r->sku<br>";
				}
			}
			$this->_db->setQuery("TRUNCATE TABLE #__excel2js_related_products");
			$this->_db->Query();
		}
...
Рейтинг: 0 / 0
17.11.2017, 12:35
    #39555024
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
...
Рейтинг: 0 / 0
17.11.2017, 12:36
    #39555026
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
...
Рейтинг: 0 / 0
17.11.2017, 12:37
    #39555028
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
...
Рейтинг: 0 / 0
17.11.2017, 13:02
    #39555044
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
А вопрос-то в чём?

PS. И эта... не лечим мы по фотографиям. SHOW CREATE TABLE текстом в теге SRC sql гораздо полезнее.
...
Рейтинг: 0 / 0
21.11.2017, 15:47
    #39556971
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Akina,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE IF NOT EXISTS `ven_jshopping_products_relations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `product_related_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `product_id` (`product_id`,`product_related_id`),
  KEY `product_id_2` (`product_id`),
  KEY `product_related_id` (`product_related_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19999 ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT INTO `ven_jshopping_products_relations` (`id`, `product_id`, `product_related_id`) VALUES
(19909, 447, 448),
(19910, 447, 449),
(19911, 447, 450),
(19912, 447, 603),
(19916, 447, 751),
(19913, 447, 885),
(19914, 447, 886),
(19915, 447, 887);



Чтобы каждое `product_related_id` в ручную не писать, как можно автоматизировать?
...
Рейтинг: 0 / 0
21.11.2017, 16:29
    #39557009
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
А откуда ты его берёшь, чтобы писать вручную-то?
...
Рейтинг: 0 / 0
22.11.2017, 07:17
    #39557267
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Akina, с этой таблицы)
Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
CREATE TABLE IF NOT EXISTS `ven_jshopping_products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `product_ean` varchar(64) NOT NULL,
  `product_quantity` decimal(12,2) NOT NULL,
  `unlimited` tinyint(1) NOT NULL,
  `product_availability` varchar(1) NOT NULL,
  `product_date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modify` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `product_publish` tinyint(1) NOT NULL,
  `product_tax_id` tinyint(3) NOT NULL,
  `currency_id` int(4) NOT NULL,
  `product_template` varchar(64) NOT NULL DEFAULT 'default',
  `product_url` varchar(255) NOT NULL,
  `product_old_price` decimal(14,4) NOT NULL,
  `product_buy_price` decimal(14,4) NOT NULL,
  `product_price` decimal(18,6) NOT NULL,
  `min_price` decimal(12,2) NOT NULL,
  `different_prices` tinyint(1) NOT NULL,
  `product_weight` decimal(14,4) NOT NULL,
  `image` varchar(255) NOT NULL,
  `product_manufacturer_id` int(11) NOT NULL,
  `product_is_add_price` tinyint(1) NOT NULL,
  `add_price_unit_id` int(3) NOT NULL,
  `average_rating` float(4,2) NOT NULL,
  `reviews_count` int(11) NOT NULL,
  `delivery_times_id` int(4) NOT NULL,
  `hits` int(11) NOT NULL,
  `weight_volume_units` decimal(14,4) NOT NULL,
  `basic_price_unit_id` int(3) NOT NULL,
  `label_id` int(11) NOT NULL,
  `vendor_id` int(11) NOT NULL,
  `access` int(3) NOT NULL DEFAULT '1',
  `name_en-GB` varchar(255) NOT NULL,
  `alias_en-GB` varchar(255) NOT NULL,
  `short_description_en-GB` text NOT NULL,
  `description_en-GB` text NOT NULL,
  `meta_title_en-GB` varchar(255) NOT NULL,
  `meta_description_en-GB` text NOT NULL,
  `meta_keyword_en-GB` text NOT NULL,
  `name_ru-RU` varchar(255) NOT NULL,
  `alias_ru-RU` varchar(255) NOT NULL,
  `short_description_ru-RU` text NOT NULL,
  `description_ru-RU` text NOT NULL,
  `meta_title_ru-RU` varchar(255) NOT NULL,
  `meta_description_ru-RU` text NOT NULL,
  `meta_keyword_ru-RU` text NOT NULL,
  `extra_field_1` text NOT NULL,
  `extra_field_2` text NOT NULL,
  `extra_field_3` text NOT NULL,
  `extra_field_4` text NOT NULL,
  `extra_field_5` text NOT NULL,
  `extra_field_7` text NOT NULL,
  `extra_field_8` text NOT NULL,
  `extra_field_9` text NOT NULL,
  `extra_field_10` text NOT NULL,
  `extra_field_11` text NOT NULL,
  `extra_field_12` text NOT NULL,
  `extra_field_13` text NOT NULL,
  `extra_field_14` text NOT NULL,
  `extra_field_15` text NOT NULL,
  `extra_field_16` text NOT NULL,
  `extra_field_17` text NOT NULL,
  `extra_field_18` text NOT NULL,
  `extra_field_19` text NOT NULL,
  `extra_field_20` text NOT NULL,
  `extra_field_21` text NOT NULL,
  `extra_field_22` text NOT NULL,
  `extra_field_23` text NOT NULL,
  `extra_field_24` text NOT NULL,
  `extra_field_25` varchar(100) NOT NULL,
  `extra_field_26` varchar(100) NOT NULL,
  `extra_field_27` varchar(100) NOT NULL,
  `extra_field_28` varchar(100) NOT NULL,
  `extra_field_29` varchar(100) NOT NULL,
  `extra_field_30` varchar(100) NOT NULL,
  `extra_field_31` varchar(100) NOT NULL,
  `extra_field_32` varchar(100) NOT NULL,
  `extra_field_33` varchar(100) NOT NULL,
  `extra_field_34` varchar(100) NOT NULL,
  `extra_field_35` varchar(100) NOT NULL,
  `extra_field_36` varchar(100) NOT NULL,
  `extra_field_37` varchar(100) NOT NULL,
  `extra_field_38` varchar(100) NOT NULL,
  `extra_field_39` varchar(100) NOT NULL,
  `extra_field_40` varchar(100) NOT NULL,
  `extra_field_41` varchar(100) NOT NULL,
  `extra_field_42` varchar(100) NOT NULL,
  `extra_field_43` varchar(100) NOT NULL,
  `extra_field_44` varchar(100) NOT NULL,
  `extra_field_45` varchar(100) NOT NULL,
  `extra_field_46` varchar(100) NOT NULL,
  `extra_field_47` varchar(100) NOT NULL,
  `extra_field_48` varchar(100) NOT NULL,
  `extra_field_49` varchar(100) NOT NULL,
  `extra_field_50` varchar(100) NOT NULL,
  PRIMARY KEY (`product_id`),
  KEY `product_manufacturer_id` (`product_manufacturer_id`),
  KEY `parent_id` (`parent_id`),
  KEY `product_ean` (`product_ean`),
  KEY `unlimited` (`unlimited`),
  KEY `product_publish` (`product_publish`),
  KEY `product_tax_id` (`product_tax_id`),
  KEY `currency_id` (`currency_id`),
  KEY `product_price` (`product_price`),
  KEY `min_price` (`min_price`),
  KEY `add_price_unit_id` (`add_price_unit_id`),
  KEY `average_rating` (`average_rating`),
  KEY `reviews_count` (`reviews_count`),
  KEY `delivery_times_id` (`delivery_times_id`),
  KEY `hits` (`hits`),
  KEY `basic_price_unit_id` (`basic_price_unit_id`),
  KEY `label_id` (`label_id`),
  KEY `vendor_id` (`vendor_id`),
  KEY `access` (`access`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=71339 ;

...
Рейтинг: 0 / 0
22.11.2017, 07:51
    #39557278
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Zhanadilс этой таблицыТак нет у тебя в "этой таблице" поля product_related_id...

И вообще я не понимаю, почему из тебя надо давить информацию по капле. Неужели трудно понять, что только тебе известны все тонкости, а вот остальные вообще не в курсе.

Из доступных уже сейчас советов - читать-изучать запросы типа INSERT .. SELECT . Скорее всего использование этого типа запроса полностью решит твою (пока не очень понятную) задачу.
...
Рейтинг: 0 / 0
22.11.2017, 08:08
    #39557279
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Akina,

в таблице "ven_jshopping_products"
Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
CREATE TABLE IF NOT EXISTS `ven_jshopping_products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `product_ean` varchar(64) NOT NULL,
  `product_quantity` decimal(12,2) NOT NULL,
  `unlimited` tinyint(1) NOT NULL,
  `product_availability` varchar(1) NOT NULL,
  `product_date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modify` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `product_publish` tinyint(1) NOT NULL,
  `product_tax_id` tinyint(3) NOT NULL,
  `currency_id` int(4) NOT NULL,
  `product_template` varchar(64) NOT NULL DEFAULT 'default',
  `product_url` varchar(255) NOT NULL,
  `product_old_price` decimal(14,4) NOT NULL,
  `product_buy_price` decimal(14,4) NOT NULL,
  `product_price` decimal(18,6) NOT NULL,
  `min_price` decimal(12,2) NOT NULL,
  `different_prices` tinyint(1) NOT NULL,
  `product_weight` decimal(14,4) NOT NULL,
  `image` varchar(255) NOT NULL,
  `product_manufacturer_id` int(11) NOT NULL,
  `product_is_add_price` tinyint(1) NOT NULL,
  `add_price_unit_id` int(3) NOT NULL,
  `average_rating` float(4,2) NOT NULL,
  `reviews_count` int(11) NOT NULL,
  `delivery_times_id` int(4) NOT NULL,
  `hits` int(11) NOT NULL,
  `weight_volume_units` decimal(14,4) NOT NULL,
  `basic_price_unit_id` int(3) NOT NULL,
  `label_id` int(11) NOT NULL,
  `vendor_id` int(11) NOT NULL,
  `access` int(3) NOT NULL DEFAULT '1',
  `name_en-GB` varchar(255) NOT NULL,
  `alias_en-GB` varchar(255) NOT NULL,
  `short_description_en-GB` text NOT NULL,
  `description_en-GB` text NOT NULL,
  `meta_title_en-GB` varchar(255) NOT NULL,
  `meta_description_en-GB` text NOT NULL,
  `meta_keyword_en-GB` text NOT NULL,
  `name_ru-RU` varchar(255) NOT NULL,
  `alias_ru-RU` varchar(255) NOT NULL,
  `short_description_ru-RU` text NOT NULL,
  `description_ru-RU` text NOT NULL,
  `meta_title_ru-RU` varchar(255) NOT NULL,
  `meta_description_ru-RU` text NOT NULL,
  `meta_keyword_ru-RU` text NOT NULL,
  `extra_field_1` text NOT NULL,
  `extra_field_2` text NOT NULL,
  `extra_field_3` text NOT NULL,
  `extra_field_4` text NOT NULL,
  `extra_field_5` text NOT NULL,
  `extra_field_7` text NOT NULL,
  `extra_field_8` text NOT NULL,
  `extra_field_9` text NOT NULL,
  `extra_field_10` text NOT NULL,
  `extra_field_11` text NOT NULL,
  `extra_field_12` text NOT NULL,
  `extra_field_13` text NOT NULL,
  `extra_field_14` text NOT NULL,
  `extra_field_15` text NOT NULL,
  `extra_field_16` text NOT NULL,
  `extra_field_17` text NOT NULL,
  `extra_field_18` text NOT NULL,
  `extra_field_19` text NOT NULL,
  `extra_field_20` text NOT NULL,
  `extra_field_21` text NOT NULL,
  `extra_field_22` text NOT NULL,
  `extra_field_23` text NOT NULL,
  `extra_field_24` text NOT NULL,
  `extra_field_25` varchar(100) NOT NULL,
  `extra_field_26` varchar(100) NOT NULL,
  `extra_field_27` varchar(100) NOT NULL,
  `extra_field_28` varchar(100) NOT NULL,
  `extra_field_29` varchar(100) NOT NULL,
  `extra_field_30` varchar(100) NOT NULL,
  `extra_field_31` varchar(100) NOT NULL,
  `extra_field_32` varchar(100) NOT NULL,
  `extra_field_33` varchar(100) NOT NULL,
  `extra_field_34` varchar(100) NOT NULL,
  `extra_field_35` varchar(100) NOT NULL,
  `extra_field_36` varchar(100) NOT NULL,
  `extra_field_37` varchar(100) NOT NULL,
  `extra_field_38` varchar(100) NOT NULL,
  `extra_field_39` varchar(100) NOT NULL,
  `extra_field_40` varchar(100) NOT NULL,
  `extra_field_41` varchar(100) NOT NULL,
  `extra_field_42` varchar(100) NOT NULL,
  `extra_field_43` varchar(100) NOT NULL,
  `extra_field_44` varchar(100) NOT NULL,
  `extra_field_45` varchar(100) NOT NULL,
  `extra_field_46` varchar(100) NOT NULL,
  `extra_field_47` varchar(100) NOT NULL,
  `extra_field_48` varchar(100) NOT NULL,
  `extra_field_49` varchar(100) NOT NULL,
  `extra_field_50` varchar(100) NOT NULL,
  PRIMARY KEY (`product_id`),
  KEY `product_manufacturer_id` (`product_manufacturer_id`),
  KEY `parent_id` (`parent_id`),
  KEY `product_ean` (`product_ean`),
  KEY `unlimited` (`unlimited`),
  KEY `product_publish` (`product_publish`),
  KEY `product_tax_id` (`product_tax_id`),
  KEY `currency_id` (`currency_id`),
  KEY `product_price` (`product_price`),
  KEY `min_price` (`min_price`),
  KEY `add_price_unit_id` (`add_price_unit_id`),
  KEY `average_rating` (`average_rating`),
  KEY `reviews_count` (`reviews_count`),
  KEY `delivery_times_id` (`delivery_times_id`),
  KEY `hits` (`hits`),
  KEY `basic_price_unit_id` (`basic_price_unit_id`),
  KEY `label_id` (`label_id`),
  KEY `vendor_id` (`vendor_id`),
  KEY `access` (`access`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=71339 ;



есть строка product_ean в таблице "ven_jshopping_products", в которую записывается коллекция товара, допустим название Adagio. Условно product_id этого товара 447. Есть и другие товары той же коллекции (Adagio), c product_id 448,449,450 и т.д.

И далее в таблице ven_jshopping_products_relations

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE IF NOT EXISTS `ven_jshopping_products_relations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `product_related_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `product_id` (`product_id`,`product_related_id`),
  KEY `product_id_2` (`product_id`),
  KEY `product_related_id` (`product_related_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19999 ;



Записываю по такому запросу, в ручную на каждый product_id - product_related_id (сопутствующие товары по коллекции, условно пример с того же "Adagio") как тут:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
INSERT INTO `ven_jshopping_products_relations` (`id`, `product_id`, `product_related_id`) VALUES
(19909, 447, 448),
(19910, 447, 449),
(19911, 447, 450),
(5922, 448, 447),
(5918, 448, 449),
(5919, 448, 450),
(5903, 449, 447),
(5904, 449, 448),
(5905, 449, 450),
(5412, 450, 447),
(5413, 450, 448),
(5414, 450, 449);

...
Рейтинг: 0 / 0
22.11.2017, 08:51
    #39557289
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Итак, у нас имеются таблицы:

ven_jshopping_products_relations
ven_jshopping_products

Имеется запись в таблице ven_jshopping_products с неким product_id. В этой записи имеется неуникальное поле product_ean, объединяющее несколько записей в коллекцию.

Сразу возникает вопрос - почему собственно коллекции не вынесены в отдельную таблицу? а в таблице продуктов - только ссылка на таблицу коллекций. Это, во-первых, уберёт дублирование строкового поля, во-вторых, избавит от опечаток (а то внесёт один оператор по ошибке не Adagio, а, скажем, Adajio - и развалится коллекция...).

Далее. В таблице ven_jshopping_products_relations ты хочешь получить все пары товаров из таблицы ven_jshopping_products, относящиеся к одной коллекции.

Не спрашиваю, зачем (занятие мне представляется бессмысленным, потому что эти данные можно в любой момент получить простейшим запросом) - но ты понимаешь, что при этом данные в базе дублируются (информация о соответствии может быть получена как из одной, так и из другой таблицы), что в отсутствие системы контроля целостности (а структура построить такую систему не позволяет) чревато логическими ошибками в данных?

Иными словами, я считаю, что у тебя имеются серьёзнейшие проблемы в структуре БД, проистекающие из неверно выполненного анализа и ошибочной ER-диаграммы. То есть впереди - поле из граблей, и ты уже на его краю... и лучшее, что можно сделать - срочно пересмотреть структуру, пока (если ещё) не поздно.

Ну а решается твоя исходная проблема элементарно запросом

Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO ven_jshopping_products_relations ( /* id, */ product_id, product_related_id)
SELECT /* не понимаю, откуда берутся значения для поля id , */
       t1.product_id, t2.product_id
FROM ven_jshopping_products t1, ven_jshopping_products t2
WHERE t1.product_ean = t2.product_ean 
  AND t1.product_id != t2.product_id
...
Рейтинг: 0 / 0
22.11.2017, 08:54
    #39557291
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
PS. Индексы в таблице, похоже, делались согласно информации с потолка - часть явно бессмысленны, часть дублируются, а части явно нужных - нет.
...
Рейтинг: 0 / 0
22.11.2017, 09:09
    #39557296
Zhanadil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с запросом
Akina,

спасибо! Часть написанного не понял) Я новичок в работе с БД. Пойду допетривать. Если в джумле joomshoppingom работали, поняли бы. Просто я не знаю как Вам по полочкам и более корректно инфу донести. Потому что толком не разбираюсь в СуБД
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с запросом / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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