Jump to content

Составить сложный MYSQL запрос


Recommended Posts

Мне нужно отсортировать товары в выдаче из подкатегорий таким образом чтобы их сортировка по умолчанию учитывала позиции категорий и подкатегорий в каталоге...привязаться к ID категории или дате создания их я не могу...

Мне кажется что это как то можно реализовать учитывая `level_depth` `nleft` `nright` rколонки в ps_category..

В общем на странице выводятся товары все из подкатегорий и они должны сортироваться правильно и выводиться из категорий в том порядке в каком они расположены в списке категорий сайта.


PS.: Стандартно запрос в престе вытаскивает все товары из категорий и сортирует их по ID и по позиции в категории...но проблема в том что в каждой категории есть товар позиционированный под номером 1...2...и весь товар идет вперемешку...


Пока у меня получился такой запрос в blocklayered.php:
 

			SELECT p.*, '.($alias_where == 'p' ? ' ' : 'product_shop.*, ').$alias_where.'.id_category_default, pl.*, i.id_image, il.legend, m.name manufacturer_name,
			DATEDIFF('.$alias_where.'.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
			FROM `'._DB_PREFIX_.'category_product` cp
			LEFT JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category)
			LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product`
			'.$join.'
			LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
			LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
			LEFT JOIN '._DB_PREFIX_.'image_lang il ON (i.id_image = il.id_image AND il.id_lang = '.(int)($cookie->id_lang).')
			LEFT JOIN '._DB_PREFIX_.'manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
			WHERE '.$alias_where.'.`active` = 1 AND
			'.(Configuration::get('PS_LAYERED_FULL_TREE') ? 'c.nleft >= '.(int)$parent->nleft.'
			AND c.nright <= '.(int)$parent->nright : 'c.id_category = '.(int)$id_parent).'
			AND c.active = 1
			AND pl.id_lang = '.(int)$cookie->id_lang.'
			AND p.id_product IN ('.implode(',', $product_id_list).')'
			.' GROUP BY p.id_product ORDER BY cp.id_category DESC, cp.position ASC, '.Tools::getProductsOrder('by', Tools::getValue('orderby'), true).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).
			' LIMIT '.(((int)$this->page - 1) * $n.','.$n));

Тут учитывается ID категории и позиция товара в этой категории, уже получше..но все же например есть основные категории типа Купальники и Белье и в них подкатегории с разными ID и получается так что идет в начале товары из какой ни будь подкатегории в купальниках..после из подкатегории в белье, потом снова из другой подкатегории купальников вылазит товар...а после вообще носки какие ни будь могут вылезти......а должны быть сначала товары из купальников..потом из белья..

Edited by Kerm (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...