powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с запросом
13 сообщений из 13, страница 1 из 1
Помогите разобраться с запросом
    #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
Помогите разобраться с запросом
    #39555024
Zhanadil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #39555026
Zhanadil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #39555028
Zhanadil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #39555044
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вопрос-то в чём?

PS. И эта... не лечим мы по фотографиям. SHOW CREATE TABLE текстом в теге SRC sql гораздо полезнее.
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #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
Помогите разобраться с запросом
    #39557009
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда ты его берёшь, чтобы писать вручную-то?
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #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
Помогите разобраться с запросом
    #39557278
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhanadilс этой таблицыТак нет у тебя в "этой таблице" поля product_related_id...

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

Из доступных уже сейчас советов - читать-изучать запросы типа INSERT .. SELECT . Скорее всего использование этого типа запроса полностью решит твою (пока не очень понятную) задачу.
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #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
Помогите разобраться с запросом
    #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
Помогите разобраться с запросом
    #39557291
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Индексы в таблице, похоже, делались согласно информации с потолка - часть явно бессмысленны, часть дублируются, а части явно нужных - нет.
...
Рейтинг: 0 / 0
Помогите разобраться с запросом
    #39557296
Zhanadil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

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


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