Search the Community
Showing results for tags 'sql'.
Found 15 results
-
Добрых времени суток, столкнулся с такой проблемой - нужно изменить валидацию телефонов во время создания аккаунта незарегистрированным пользователем. Моделируем ситуацию - товары в корзине, человек не зарегистрирован, дальше он вводит все свои данные и нажимает "оформить заказ". Мне со стороны модели необходимо вставить валидацию на телефон указанный при этой быстрой регистрации. Все что пока получилось - валидация в таблицу order а вот в customer падает неотформатированный телефон. Хотелось бы узнать, какие файлы используются когда человек делает быструю регистрацию из корзины. Спасибо за помощь. p.s. само собой customer.php в модели я редактировал , это не сработало, наверное ещё есть запрос в бд на запись какой-то.
-
Нужно скопировать названия производителей с языка id 1 в язык с id 2. Переводить там руками нечего, а брендов много. Может кто-то помочь с составлением SQL-запроса?
-
Вопрос к мега-технарям форума Есть задача: Удалить значение опции из `oc_product_option_value`, которая по идее идет в паре с записью в `oc_product_option` Мы знаем, что, грубо говоря, есть 2 типа опций. - А) Простые пишутся только в `oc_product_option` (одно поле, к примеру дата или текст) - Б) Сложные, имеют варианты значений (много полей, к примеру, несколько размеров кроссовок). Варианты значений дополнительно пишут еще и в `oc_product_option_value` Так вот, я удаляю опцию из `oc_product_option` А затем хочу удалить из `oc_product_option_value` Но! Тут есть 2 варианта как поступить: - 1. Сначала проверить, а является ли эта опция сложной (запрос на существование вариантов значений `oc_option_value`). И при наличии вариантов, уже удалять эту опцию из `oc_product_option_value` - 2. Просто выполнить удаление вслепую. Если так выйдет, что опция была простой, - ну подумаешь, будет удалено 0 строк. По скорости потестил: SELECT `option_value_id` FROM `oc_option_value` WHERE `option_id` = '4' -- Выполняется 0.0003 с. DELETE FROM `oc_product_option_value` WHERE `product_id` = '42' AND `option_id` = '4' -- Выполняется 0.0002 с. По скорости логично просто удалять вслепую. Тем более, что если конкретная опция окажется сложной, то по результатам 2-ух запросов выйдет уже почти в 2 раза дольше (0,0005). А запросов может быть много и товаров на реальном сайте тоже может быть много. Экономнее делать 1 запрос. Но феншуйно ли так поступать?
-
Здравствуйте, получается вывести лишь один элемент из mysql таблицы с помощью php и sql запроса, как на opencart вывести абсолютно все элементы?
-
SELECT orders.order_id, clients.name AS client_name, clients.phone, users.login, order_status.name, SUM(products.price * order_content.quantity) as order_price FROM orders, order_status, users, clients, products,order_content WHERE (orders.status_id = order_status.status_id) AND (users.user_id = orders.user_id) AND (clients.client_id = orders.client_id) AND (orders.order_id = order_content.order_id) AND(order_content.product_id = products.product_id) GROUP BY(orders.order_id) выводит пустую таблицу
-
Нужна помощь, не могу разобраться в sql запросе. в /catalog/model/catalog/product.php есть функция: public function getProduct($product_id) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special,(SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND pr.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); if ($query->num_rows) { return array( 'product_id' => $query->row['product_id'], 'name' => $query->row['name'], 'description' => $query->row['description'], 'meta_title' => $query->row['meta_title'], 'meta_description' => $query->row['meta_description'], 'meta_keyword' => $query->row['meta_keyword'], 'tag' => $query->row['tag'], 'model' => $query->row['model'], 'sku' => $query->row['sku'], 'upc' => $query->row['upc'], 'ean' => $query->row['ean'], 'jan' => $query->row['jan'], 'isbn' => $query->row['isbn'], 'mpn' => $query->row['mpn'], 'location' => $query->row['location'], 'quantity' => $query->row['quantity'], 'stock_status' => $query->row['stock_status'], 'image' => $query->row['image'], 'manufacturer_id' => $query->row['manufacturer_id'], 'manufacturer' => $query->row['manufacturer'], 'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']), 'special' => $query->row['special'], 'reward' => $query->row['reward'], 'points' => $query->row['points'], 'tax_class_id' => $query->row['tax_class_id'], 'date_available' => $query->row['date_available'], 'weight' => $query->row['weight'], 'weight_class_id' => $query->row['weight_class_id'], 'length' => $query->row['length'], 'width' => $query->row['width'], 'height' => $query->row['height'], 'length_class_id' => $query->row['length_class_id'], 'subtract' => $query->row['subtract'], 'rating' => round($query->row['rating']), 'reviews' => $query->row['reviews'] ? $query->row['reviews'] : 0, 'minimum' => $query->row['minimum'], 'sort_order' => $query->row['sort_order'], 'status' => $query->row['status'], 'date_added' => $query->row['date_added'], 'date_modified' => $query->row['date_modified'], 'viewed' => $query->row['viewed'] ); } else { return false; } } В ней есть sql запрос, в котором я не могу разобраться. На примере акционного товара, подскажите, пожалуйста, как изменить этот запрос так, чтобы он вывел не 1 цену, как сейчас, а все цены, которые установлены во вкладке Акция, например 5 записей. В итоге хотел бы по определенному условию показывать нужную мне цену. Изменение/удаление LIMIT приводит к ошибке.
-
Нужно настроить синхронизацию цен из 1С на сайт. Для этого нужно на сайт внести доработки: Сначала нужно заполнить таблицу product_discount - в нее должны загружаться оптовые и дилерские цены из 1С. Загрузка номенклатуры происходит в таблицу product Надо сделать чтобы таблицы product и product_discount синхронизировались. Нужно разбираться в SQL. Пишите сюда или в личку, очень нужен толковый специалист.
-
для определенных атрибутов значение имеет фото и описание данные берутся с двух таблиц с одной картинка со второй описание данные вывожу в магазине но остальные атрибуты дублируются, из за чего такое может быть? модель продукта public function getProductAttributes($product_id) { $product_attribute_group_data = array(); $product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name"); foreach ($product_attribute_group_query->rows as $product_attribute_group) { $product_attribute_data = array(); $product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text, avd.description, av.image FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) LEFT JOIN " . DB_PREFIX . "dae_attribute_value_description avd ON (a.attribute_id = avd.attribute_id) LEFT JOIN " . DB_PREFIX . "dae_attribute_value av ON (a.attribute_id = av.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND avd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name"); foreach ($product_attribute_query->rows as $product_attribute) { $product_attribute_data[] = array( 'attribute_id' => $product_attribute['attribute_id'], 'name' => $product_attribute['name'], 'text' => $product_attribute['text'], 'image' => $product_attribute['image'], 'description' => $product_attribute['description'] ); } $product_attribute_group_data[] = array( 'attribute_group_id' => $product_attribute_group['attribute_group_id'], 'name' => $product_attribute_group['name'], 'attribute' => $product_attribute_data ); } return $product_attribute_group_data; }
-
Здравствуйте, форумчане. Задача достаточно простая, но в то же время актуальная для многих интернет-магазинов. Настроена синхронизация с 1С, при удалении товаров из базы, цена автоматически обнуляется. Нужно настроить сортировку по цене таким образом, чтобы товары с нулевым значением цены отображались в конце списка, а сортировка шла от "1" и более Знаю, что нужно выполнить правки в .../catalog/controller/product/category.php и ...catalog/model/catalog/product.php if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY " . $data['sort']; } } else { $sql .= " ORDER BY p.sort_order"; } Помогите, пожалуйста, разобраться
- 2 replies
-
- сортировка
- цены
-
(and 3 more)
Tagged with:
-
Есть дополнительные модули оплаты, как их вывести на страницу продукта? Не могу найти связь между продуктом и методом оплаты в базе данных.Пример на картинке. Спасибо.
- 9 replies
-
- opencart23
- sql
-
(and 2 more)
Tagged with:
-
Интернет магазин синхронизируется с "1С 8.3..." конфигурация "УНФ 1.6..." с помощью модуля "NeoSeo Обмен с 1C 158". В 1С ведется учет номенклатуры физического магазина и посредством модуля, на сайте обновляются цены и остатки. Часто бывают случаи, когда в магазине товар был продан до нулевого остатка, а поступление его планируется через неделю. Еще бывают случаи, когда товар был распродан и нет планов его больше привозить, по разным причинам. В 1С планируется выгрузить все прайсы поставщиков и вести учет их остатков на отдельном заведенном складе в этой же базе (м.б. на нескольких складах под каждого поставщика). В модуле "NeoSeo Обмен с 1C 158" можно задать любое количество соответствующих базе складов и поля для написания в них SQL запросы (SQL до обработки остатков, SQL после обработки остатков). Задача заключается в том, если товары отсутствуют на складе физического магазина, чтобы статусы и цены товаров менялись автоматически при прогонке прайса поставщика через базу 1С, к примеру с "есть в наличии" на "предзаказ 1-3". Если товара нет на сладе магазина и ни у одного из поставщиков, то статус товара меняется к примеру на "нет в наличии". Важно чтобы склад магазина был приоритетным, и при поступлении товара на его склад, статус менялся бы на "есть в наличии" не зависимо от наличия товара у поставщика.
- 4 replies
-
- синхронизация с 1с
- статус товара
-
(and 3 more)
Tagged with:
-
Добрый день! Нужна помощь сообщества В интернет-магазине примерно 520 наименований товаров. Несколько месяцев назад мы начали получать письма от хостинга с предупреждением о превышении нагрузки на базу. По тарифному плану суточный лимит MySQL был установлен 900 сек, но были значения 950-1100. Основную нагрузку давал такой запрос: Почитав этот форум, нашел рекомендацию убрать из настроек магазина подсчет количества товаров в группах (было 13 групп). Первое время это помогало, но потом опять начались случаи перебора. Решили перейти на другой тарифный план, с лимитом нагрузки на базу 1350 сек (такого значения не было вообще никогда). Вроде бы уже обрадовались, все нормально - и тут вчера получаем нагрузку 3799, то есть 181% превышения. Как такое возможно в магазине с относительно небольшим количеством товара? Я под спойлером даю статистику по сайту. Как видите, имеет место скачок посещаемости 14.11, но в то же время 27 и 28 октября посещаемость была больше 25000, при этом нагрузка за пределы нормы даже и близко не выходила. Как раз 27-28 числа я размещал материалы со ссылкой на сайт (точнее на форума магазина, а не сам магазин) в нашей группе в Фейсбуке, этим можно объяснить рост посетителей в те дни. Так же я делал пост в Фейсбуке и 13 числа, тоже со ссылкой на форума магазина. Опять посещаемость выросла, но при этом и зашкалила нагрузка. Это не может быть признаком какой-то атаки например? Еще вопрос. В приведенном выше коде запроса есть условие WHERE pd.language_id = NNN В админке магазина был установлен (но отключен для использования) язык, который фактически не использовался (планировалось включить в будущем). Сейчас я его вообще удалил из языковых настроек, оставив только те, которые реально используются на сайте магазина. Это может повлиять на снижение нагрузки? Заранее всем спасибо за помощь!
-
Здравствуйте. Создаю поле в админке в настройках на вкладке витрина. Вот код; <spoiler> <file path="admin/controller/setting/setting.php"> <operation error="skip"> <search><![CDATA[$data['entry_google_analytics'] = $this->language->get('entry_google_analytics');]]></search> <add position="after"><![CDATA[$data['entry_config_min_price_order'] = $this->language->get('entry_config_min_price_order'); $data['entry_config_nomer_group'] = $this->language->get('entry_config_nomer_group');]]></add> </operation> <operation error="skip"> <search><![CDATA[$data['config_fax'] = $this->config->get('config_fax');]]></search> <add position="after" offset="2"><![CDATA[if (isset($this->request->post['config_min_price_order'])) { $data['config_min_price_order'] = $this->request->post['config_min_price_order']; } else { $data['config_min_price_order'] = $this->config->get('config_min_price_order'); } if (isset($this->request->post['config_nomer_group'])) { $data['config_nomer_group'] = $this->request->post['config_nomer_group']; } else { $data['config_nomer_group'] = $this->config->get('config_nomer_group'); } if (isset($this->request->post['nomer_group_2'])) { $data['config_nomer_group_2'] = $this->request->post['config_nomer_group_2']; } else { $data['config_nomer_group_2'] = $this->config->get('config_nomer_group_2'); } if (isset($this->request->post['nomer_group_3'])) { $data['config_nomer_group_3'] = $this->request->post['config_nomer_group_3']; } else { $data['config_nomer_group_3'] = $this->config->get('config_nomer_group_3'); } if (isset($this->request->post['nomer_group_4'])) { $data['config_nomer_group_4'] = $this->request->post['config_nomer_group_4']; } else { $data['config_nomer_group_4'] = $this->config->get('config_nomer_group_4'); } if (isset($this->request->post['nomer_group_5'])) { $data['config_nomer_group_5'] = $this->request->post['config_nomer_group_5']; } else { $data['config_nomer_group_5'] = $this->config->get('config_nomer_group_5'); } if (isset($this->request->post['nomer_group_6'])) { $data['config_nomer_group_6'] = $this->request->post['config_nomer_group_6']; } else { $data['config_nomer_group_6'] = $this->config->get('config_nomer_group_6'); } if (isset($this->request->post['nomer_group_7'])) { $data['config_nomer_group_7'] = $this->request->post['config_nomer_group_7']; } else { $data['config_nomer_group_7'] = $this->config->get('config_nomer_group_7'); }]]></add> </operation> </file> <file path="admin/view/template/setting/setting.tpl"> <operation error="skip"> <search><![CDATA[<input type="text" name="config_fax" value="<?php echo $config_fax; ?>" placeholder="<?php echo $entry_fax; ?>" id="input-fax" class="form-control" />]]></search> <add position="after" offset="2"><![CDATA[<div class="form-group"> <label class="col-sm-2 control-label" for="input-fax"><?php echo $entry_config_min_price_order; ?></label> <div class="col-sm-10"> <input type="text" name="min_price_order" value="<?php echo $config_min_price_order; ?>" placeholder="<?php echo $config_min_price_order; ?>" class="form-control" /> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label" for="input-fax"><?php echo $entry_config_nomer_group; ?></label> <div class="col-sm-10"> <td><input style="width: 40px;" type="text" name="nomer_group" value="<?php echo $config_nomer_group; ?>" /><input style="width: 40px;" type="text" name="nomer_group_2" value="<?php echo $config_nomer_group_2; ?>" /><input style="width: 40px;" type="text" name="nomer_group_3" value="<?php echo $config_nomer_group_3; ?>" /><input style="width: 40px;" type="text" name="nomer_group_4" value="<?php echo $config_nomer_group_4; ?>" /><input style="width: 40px;" type="text" name="nomer_group_5" value="<?php echo $config_nomer_group_5; ?>" /><input style="width: 40px;" type="text" name="nomer_group_6" value="<?php echo $config_nomer_group_6; ?>" /><input style="width: 40px;" type="text" name="nomer_group_7" value="<?php echo $config_nomer_group_7; ?>" /></td> </div> </div>]]></add> </operation> </file> </spoiler> В таблице `oc_setting` по ключу нашел config_fax скопировал, поменял значения и сохранил. На вкладке Витрина значение появилось. Нажимаю "сохранить" и все, значение, ключ и т.д. как не было. Что делать? Спасибо.