scary.png Happy Halloween! Лови жутко страшный список шаблонов и модулей со скидками.
Jump to content
VladSiy

Нужна помощь в sql запросе

Recommended Posts

Posted (edited)

Нужна помощь, не могу разобраться в 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 приводит к ошибке.

Edited by VladSiy

Share this post


Link to post
Share on other sites

функцию целиком выпишите - это важно.

Share this post


Link to post
Share on other sites

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

Чтобы вытянуть все акционные цены, лучше сделать отдельный запрос с указанием id товара.

  • +1 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By SergeTkach
      Вопрос к мега-технарям форума
       
      Есть задача:
       
      Удалить значение опции из `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 запрос. Но феншуйно ли так поступать?
       
    • By valerykurak
      Здравствуйте. Есть обычная контактная форма в ней несколько select'ов. Образование, страна, регион. Поля образований хранятся прямо в самой форме. Можно ли сделать страна регион как в админ панели опенкарт к примеру при добавления адреса покупателя?
    • By asd1992
      Здравствуйте, в каталоге товаров здесь https://test.miturbo.ru/category/xiaomi-redmi-note-8
      Нужно вывести код товара. Как мне это сделать? В БД есть таблица oc_product
      и в этой таблице есть значение model в этом значении есть код товара у каждого товара.

      Мне нужно вывести код товара этот. но просто вот так: <span>{{ model }}</span> не получается.
      А в product.twig <span>{{ model }}</span> вот так получается.

      За вывод этой страницы https://test.miturbo.ru/category/xiaomi-redmi-note-8 отвечает файл category_grid.twig . Если в этот файл добавить <span>{{ model }}</span> то нечего не получится, а если в product.twig то получится. {{ model }} означает код товара. Как мне сделать так чтобы в category_grid.twig тоже получалось к каждому товару выводить свой код товара.

      Это мне из БД как то вытаскивать или нет? Если уже выводить из БД то нужно сделать так чтобы к каждому товару свой код товара подходящий выводился, а не у всех товаров был одинаковый код товара.

      Буду очень благодарен.
    • By Wyachik2
      Здравствуйте! Возникла проблема, есть файл который должен импортировать товары в mysql. Это он и делает но созданные товары не отображаются в админке. Помогите с решением
      createCartProd.php
    • By valerykurak
      Здравствуйте, получается вывести лишь один элемент из mysql таблицы  с помощью php и sql запроса, как на opencart вывести абсолютно все элементы?
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.