<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WebAsyst ShopScript &#8212; Nikita Spivak</title>
	<atom:link href="https://nikita-sp.com.ua/tag/webasyst-shopscript/feed" rel="self" type="application/rss+xml" />
	<link>https://nikita-sp.com.ua</link>
	<description>web developer&#039;s portfolio</description>
	<lastBuildDate>Fri, 11 Sep 2015 13:50:59 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Как не положить БД MySQL, используя поиск по атрибутам в WebAsyst ShopScript</title>
		<link>https://nikita-sp.com.ua/2013/02/kak-ne-polozhit-bd-mysql-ispolzuya-poisk-po.html</link>
					<comments>https://nikita-sp.com.ua/2013/02/kak-ne-polozhit-bd-mysql-ispolzuya-poisk-po.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Thu, 28 Feb 2013 15:47:05 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[WebAsyst ShopScript]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=656</guid>

					<description><![CDATA[Добрый день, уважаемые читатели моего блога! Данная статья является продолжением истории с WA SS, начало которой вы можете прочитать тут: WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript. По многочисленным просьбам на форуме WebAsyst&#8217;a я пишу эту запись. Ничего сложного или необычного в данной статье нет, но тем не менее, благодаря [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Добрый день, уважаемые читатели моего блога!</p>
<p>Данная статья является продолжением истории с WA SS, начало которой вы можете прочитать тут: <a title="WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript" href="http://nikita-sp.com.ua/2013/02/webasyst-naplevat-na-vladeltsev-shopscript-ili-kak-po.html" data-wpel-link="internal">WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript</a>.</p>
<p>По многочисленным <a href="http://forum.webasyst.ru/viewtopic.php?id=18562" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">просьбам на форуме WebAsyst&#8217;a<span class="wpel-icon wpel-image wpel-icon-6"></span></a> я пишу эту запись. Ничего сложного или необычного в данной статье нет, но тем не менее, благодаря этому  хаку вы можете избежать &#171;уложения&#187; вашей БД MySQL.<br />
<span id="more-656"></span></p>
<p>Итак, приступим. Открываем файл:<br />
<em>C:\WebServers\home\domain\www\published\SC\html\scripts\core_functions\product_functions.php</em></p>
<p>В данном файле находим функцию <strong>_prepareSearchExtraParameters.</strong><br />
Немного о функции: данная функция составляет запрос в базу данных на основании тех параметров которые ей переданы (атрибуты, категории и т.п.).</p>
<p>На 507 строке мы видим открытие цикла, который прогоняет все item&#8217;ы и на 517 мы видим что каждый раз в массив <em>$sqls_joins </em>добавляется новый <em>LEFT JOIN, </em>который собственно и грузит нашу базу. Для примера могу сказать, что при тесте  на локальном сервере запрос, имеющий 1x LEFT JOIN занял 0,002 сек., в то время как 2xLEFT JOIN заняло 8,8 секунд. (возможна погрешность в данных, ибо пишу спустя неделю после теста :), могу сказать одно, что разница между временем была <strong>в 500 раз</strong>).</p>
<p>На каждом проходе нашего цикла присоединяется ОДНА И ТАКЖЕ ТАБЛИЦА с разным именем, которое просто инкрементируется!</p>
<pre class="brush: plain; title: Код:; notranslate">LEFT JOIN SC_product_options_values PrdOptVal0 ON p.productID=PrdOptVal0.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet0 ON p.productID=PrdOptSet0.`productID`

LEFT JOIN SC_product_options_values PrdOptVal1 ON p.productID=PrdOptVal1.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet1 ON p.productID=PrdOptSet1.`productID`</pre>
<p>Это происходит на 519 строке:</p>
<pre class="brush: plain; title: Код:; notranslate">			$sqls_joins[] = '
				LEFT JOIN ?#PRODUCT_OPTIONS_VALUES_TABLE PrdOptVal'.$cnt.' ON p.productID=PrdOptVal'.$cnt.'.productID
				LEFT JOIN ?#PRODUCTS_OPTIONS_SET_TABLE PrdOptSet'.$cnt.' ON p.productID=PrdOptSet'.$cnt.'.productID
				LEFT JOIN ?#PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE PrdOptValVar'.$cnt.' ON
					PrdOptSet'.$cnt.'.optionID=PrdOptValVar'.$cnt.'.optionID AND
					PrdOptSet'.$cnt.'.variantID=PrdOptValVar'.$cnt.'.variantID
			';
</pre>
<p>На 543 строке:</p>
<pre class="brush: plain; title: Код:; notranslate">
			$sqls_joins[] = '
				LEFT JOIN ?#PRODUCT_OPTIONS_VALUES_TABLE PrdOptVal'.$cnt.' ON p.productID=PrdOptVal'.$cnt.'.`productID`
				LEFT JOIN ?#PRODUCTS_OPTIONS_SET_TABLE PrdOptSet'.$cnt.' ON p.productID=PrdOptSet'.$cnt.'.`productID`
			';
</pre>
<p>Таким образом, если у нас указано куча атрибутов при поиске, то наша база ляжет и будет лежать.</p>
<p>Для того чтобы избежать такого казуса, я внес банальные и возможно, не совсем красивые, с точки зрения правил хорошего тона в программировании, изменения.<br />
Необходимо просто убрать все упоминания о переменной <strong>$cnt </strong>и изменить строки 519 и 543 таким образом, чтобы не создавался, а перезаписывался элемент массива. Таким образом мы уберем лишние объединения таблиц в запросе.</p>
<p>Возможно, лучшим бы было решение выноса данной записи из цикла, но в силу того, что изначально не понятно для чего нужен данный &#171;костыль&#187;, я ограничился незначительными изменениями.</p>
<p>Если у вас возникнут вопросы или предложения по улучшению данного мануала &#8212; пишите мне в комментарии/вопросы-ответы &#8212; буду рад ответить или принять к сведению ваши предложения!</p>
<p>Удачной оптимизации кода! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2013/02/kak-ne-polozhit-bd-mysql-ispolzuya-poisk-po.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript</title>
		<link>https://nikita-sp.com.ua/2013/02/webasyst-naplevat-na-vladeltsev-shopscript-ili-kak-po.html</link>
					<comments>https://nikita-sp.com.ua/2013/02/webasyst-naplevat-na-vladeltsev-shopscript-ili-kak-po.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sun, 17 Feb 2013 21:27:45 +0000</pubDate>
				<category><![CDATA[Интересное в мире]]></category>
		<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[WebAsyst ShopScript]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=639</guid>

					<description><![CDATA[Доброй ночи, уважаемые читатели! Сегодня хотелось бы еще раз вспомнить казус, найденный мной в движке интернет-магазина ShopScript от компании WebAsyst. (предыстория тут: Поиск продуктов по атрибутам в WebAsyst ShopScript). После написания вышеупомянутой статьи, я обратился за поддержкой на форум разработчиков, надеясь услышать внятное объяснение наличия такой записи в цикле составления MSQL запроса. (http://forum.webasyst.ru/viewtopic.php?id=18562) Нашелся человек, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Доброй ночи, уважаемые читатели!</p>
<p>Сегодня хотелось бы еще раз вспомнить казус, найденный мной в движке <strong>интернет-магазина ShopScript от компании WebAsyst</strong>. (предыстория тут: <a title="Поиск продуктов по атрибутам в WebAsyst ShopScript" href="http://nikita-sp.com.ua/2013/02/poisk-produktov-po-atributam-v-webasyst-shopscript.html" data-wpel-link="internal">Поиск продуктов по атрибутам в WebAsyst ShopScript</a>).</p>
<p>После написания вышеупомянутой статьи, я <strong>обратился за поддержкой на форум разработчиков</strong>, надеясь услышать внятное объяснение наличия такой записи в цикле составления MSQL запроса. (<a title="Пруф линк темы на сайте разработчика" href="http://forum.webasyst.ru/viewtopic.php?id=18562" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">http://forum.webasyst.ru/viewtopic.php?id=18562<span class="wpel-icon wpel-image wpel-icon-6"></span></a>)<br />
<span id="more-639"></span></p>
<p>Нашелся человек, который так же обратил внимание, на такую конструкцию во время работы с данным движком, но ответов от поддержки не последовало. Я продолжал ждать, в надежде, что кто-то ответит.<br />
<a href="http://nikita-sp.com.ua/wp-content/uploads/2013/02/1.jpg" rel="lightbox[639]" data-wpel-link="internal"><img fetchpriority="high" decoding="async" width="600" height="337" itemprop="image" class="aligncenter size-medium wp-image-640" src="http://nikita-sp.com.ua/wp-content/uploads/2013/02/1-600x337.jpg" alt="пруф скрин" srcset="https://nikita-sp.com.ua/wp-content/uploads/2013/02/1-600x337.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/1-960x539.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/1.jpg 1366w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>Ждать пришлось недолго и один из реселлеров WebAsyst ответил мне достаточно загадочно. Что, мол, за 250$ (цена движка ShopScript) <strong>никто и не подразумевает, что данный продукт должен работать и не класть БД</strong> такими запросами! И что я вообще тут глупости пишу, пфф, конечно, это естественно! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2013/02/3.jpg" rel="lightbox[639]" data-wpel-link="internal"><img decoding="async" width="600" height="337" itemprop="image" class="aligncenter size-medium wp-image-647" src="http://nikita-sp.com.ua/wp-content/uploads/2013/02/3-600x337.jpg" alt="пост ресселера" srcset="https://nikita-sp.com.ua/wp-content/uploads/2013/02/3-600x337.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/3-960x539.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/3.jpg 1366w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2013/02/2.jpg" rel="lightbox[639]" data-wpel-link="internal"><img decoding="async" width="600" height="337" itemprop="image" class="aligncenter size-medium wp-image-648" src="http://nikita-sp.com.ua/wp-content/uploads/2013/02/2-600x337.jpg" alt="мой ответ на второй ответ ресселера" srcset="https://nikita-sp.com.ua/wp-content/uploads/2013/02/2-600x337.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/2-960x539.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2013/02/2.jpg 1366w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>На что я ответил, что продуктом пользуется не один человек, и за эти деньги, полученные от тысячной аудитории клиентов, можно было сделать продукт качественней или, во всяком случае, следить за его стабильностью, хотя бы по репортам от пользователей, выпускать баг фиксы и т.п.</p>
<p>Из всего общения на форуме можно было вынести только одно, что <strong>разработчики WebAsyst&#8217;a не желают заниматься поддержкой</strong> своего скрипта и их главная задача &#8212; содрать с покупателя деньги, а дальнейшие его трудности &#8212; это его проблемы.</p>
<p>В заключение хочу сказать одно: я человек не конфликтный, но такие моменты задевают до глубины души, когда человек/компания, взявшая на себя обязательство создавать и поддерживать такой серьезный продукт как интернет-магазин, просто не желает считаться с клиентами, с которых берет не малые деньги за свой продукт.<br />
Ведь <strong>интернет-магазин &#8212; это даже не сайт-визитка, а инструмент для продажи</strong>, инструмент для ведения бизнеса.</p>
<p>На этом на сегодня все. Вскоре ожидайте статью про лечение данной проблемы.<br />
Всем спасибо за внимание, и не попадайте в такие ситуации!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2013/02/webasyst-naplevat-na-vladeltsev-shopscript-ili-kak-po.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Поиск продуктов по атрибутам в WebAsyst ShopScript</title>
		<link>https://nikita-sp.com.ua/2013/02/poisk-produktov-po-atributam-v-webasyst-shopscript.html</link>
					<comments>https://nikita-sp.com.ua/2013/02/poisk-produktov-po-atributam-v-webasyst-shopscript.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 16 Feb 2013 15:01:39 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[WebAsyst ShopScript]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=635</guid>

					<description><![CDATA[Добрый день, уважаемые читатели блога! Давно не писал в блог в связи с отсутствием интересного и необычного. Но! Вчера мир перевернулся! И не потому что на Землю летят метеориты и т.п. Дело в том, что сейчас мной дорабатывается движок компании WebAsyst ShopScript, а именно улучшается работа поиска по атрибутам. По умолчанию, поиск по атрибутам предусматривает [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Добрый день, уважаемые читатели блога!</p>
<p>Давно не писал в блог в связи с отсутствием интересного и необычного. Но! Вчера мир перевернулся! И не потому что на Землю летят метеориты и т.п.</p>
<p>Дело в том, что сейчас мной дорабатывается движок компании <strong>WebAsyst ShopScript</strong>, а именно улучшается работа поиска по атрибутам.</p>
<p>По умолчанию, поиск по атрибутам предусматривает выбор одного значения каждого из атрибутов, а в улучшенной версии поиска можно выбирать несколько значений атрибута, с помощью checkbox&#8217;ов.</p>
<p><strong>В чем же проблема у движка ShopScript?</strong><br />
Итак, открыв файл <em>C:\WebServers\home\domain\www\published\SC\html\scripts\core_functions\product_functions.php</em><br />
Я внес все необходимые изменения чтобы появилась возможность выбирать несколько атрибутов и все это нормально обрабатывалось.<br />
После пары моих тестов на локальной машине все работало отлично, но страница достаточно долго грузилась, и я решил посмотреть логи БД MSQL, где увидел запросы следующего типа:<span id="more-635"></span></p>
<pre class="brush: plain; title: Код:; notranslate">

SELECT SQL_CALC_FOUND_ROWS p.*, name_ru AS _name_sort FROM SC_products p
 LEFT JOIN SC_product_options_values PrdOptVal0 ON p.productID=PrdOptVal0.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet0 ON p.productID=PrdOptSet0.`productID`

LEFT JOIN SC_product_options_values PrdOptVal1 ON p.productID=PrdOptVal1.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet1 ON p.productID=PrdOptSet1.`productID`

LEFT JOIN SC_product_options_values PrdOptVal2 ON p.productID=PrdOptVal2.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet2 ON p.productID=PrdOptSet2.`productID`

LEFT JOIN SC_product_options_values PrdOptVal3 ON p.productID=PrdOptVal3.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet3 ON p.productID=PrdOptSet3.`productID`

LEFT JOIN SC_product_options_values PrdOptVal4 ON p.productID=PrdOptVal4.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet4 ON p.productID=PrdOptSet4.`productID`

LEFT JOIN SC_product_options_values PrdOptVal5 ON p.productID=PrdOptVal5.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet5 ON p.productID=PrdOptSet5.`productID`

LEFT JOIN SC_product_options_values PrdOptVal6 ON p.productID=PrdOptVal6.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet6 ON p.productID=PrdOptSet6.`productID`

LEFT JOIN SC_product_options_values PrdOptVal7 ON p.productID=PrdOptVal7.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet7 ON p.productID=PrdOptSet7.`productID`

LEFT JOIN SC_product_options_values PrdOptVal8 ON p.productID=PrdOptVal8.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet8 ON p.productID=PrdOptSet8.`productID`

LEFT JOIN SC_product_options_values PrdOptVal9 ON p.productID=PrdOptVal9.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet9 ON p.productID=PrdOptSet9.`productID`

LEFT JOIN SC_product_options_values PrdOptVal10 ON p.productID=PrdOptVal10.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet10 ON p.productID=PrdOptSet10.`productID`

LEFT JOIN SC_product_options_values PrdOptVal11 ON p.productID=PrdOptVal11.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet11 ON p.productID=PrdOptSet11.`productID`

LEFT JOIN SC_product_options_values PrdOptVal12 ON p.productID=PrdOptVal12.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet12 ON p.productID=PrdOptSet12.`productID`

LEFT JOIN SC_product_options_values PrdOptVal13 ON p.productID=PrdOptVal13.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet13 ON p.productID=PrdOptSet13.`productID`

LEFT JOIN SC_product_options_values PrdOptVal14 ON p.productID=PrdOptVal14.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet14 ON p.productID=PrdOptSet14.`productID`

LEFT JOIN SC_product_options_values PrdOptVal15 ON p.productID=PrdOptVal15.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet15 ON p.productID=PrdOptSet15.`productID`

LEFT JOIN SC_product_options_values PrdOptVal16 ON p.productID=PrdOptVal16.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet16 ON p.productID=PrdOptSet16.`productID`

LEFT JOIN SC_product_options_values PrdOptVal17 ON p.productID=PrdOptVal17.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet17 ON p.productID=PrdOptSet17.`productID`

LEFT JOIN SC_product_options_values PrdOptVal18 ON p.productID=PrdOptVal18.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet18 ON p.productID=PrdOptSet18.`productID`

LEFT JOIN SC_product_options_values PrdOptVal19 ON p.productID=PrdOptVal19.`productID`
 LEFT JOIN SC_product_options_set PrdOptSet19 ON p.productID=PrdOptSet19.`productID`
 WHERE ((categoryID IN (558,559,560,561,562,563,564,565,566,567,568,569,590,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,591,592,593,594,595,557)) AND ( enabled=1)) AND (
 PrdOptVal0.optionID=17
 AND
 (
 ( PrdOptVal0.option_type=1 AND PrdOptSet0.variantID=18)
 OR
 (PrdOptVal0.option_type=0 AND PrdOptVal0.option_value_ru LIKE '%Смартфон%')
 )) OR (
 PrdOptVal0.optionID=17
 AND
 (
 ( PrdOptVal0.option_type=1 AND PrdOptSet0.variantID=17)
 OR
 (PrdOptVal0.option_type=0 AND PrdOptVal0.option_value_ru LIKE '%Телефон%')
 )) AND (
 PrdOptVal1.optionID=19
 AND
 (
 ( PrdOptVal1.option_type=1 AND PrdOptSet1.variantID=19)
 OR
 (PrdOptVal1.option_type=0 AND PrdOptVal1.option_value_ru LIKE '%Android 2.2%')
 )) OR (
 PrdOptVal1.optionID=19
 AND
 (
 ( PrdOptVal1.option_type=1 AND PrdOptSet1.variantID=21)
 OR
 (PrdOptVal1.option_type=0 AND PrdOptVal1.option_value_ru LIKE '%Android 2.3%')
 )) AND (
 PrdOptVal2.optionID=20
 AND
 (
 ( PrdOptVal2.option_type=1 AND PrdOptSet2.variantID=31)
 OR
 (PrdOptVal2.option_type=0 AND PrdOptVal2.option_value_ru LIKE '%1 слот%')
 )) AND (
 PrdOptVal3.optionID=23
 AND
 (
 ( PrdOptVal3.option_type=1 AND PrdOptSet3.variantID=71)
 OR
 (PrdOptVal3.option_type=0 AND PrdOptVal3.option_value_ru LIKE '%MTK%')
 )) AND (
 PrdOptVal4.optionID=24
 AND
 (
 ( PrdOptVal4.option_type=1 AND PrdOptSet4.variantID=103)
 OR
 (PrdOptVal4.option_type=0 AND PrdOptVal4.option_value_ru LIKE '%1.0 GHz%')
 )) AND (
 PrdOptVal5.optionID=25
 AND
 (
 ( PrdOptVal5.option_type=1 AND PrdOptSet5.variantID=83)
 OR
 (PrdOptVal5.option_type=0 AND PrdOptVal5.option_value_ru LIKE '%Mali 300%')
 )) AND (
 PrdOptVal6.optionID=26
 AND
 (
 ( PrdOptVal6.option_type=1 AND PrdOptSet6.variantID=87)
 OR
 (PrdOptVal6.option_type=0 AND PrdOptVal6.option_value_ru LIKE '%1 Гб%')
 )) AND (
 PrdOptVal7.optionID=27
 AND
 (
 ( PrdOptVal7.option_type=1 AND PrdOptSet7.variantID=60)
 OR
 (PrdOptVal7.option_type=0 AND PrdOptVal7.option_value_ru LIKE '%1 Гб%')
 )) AND (
 PrdOptVal8.optionID=28
 AND
 (
 ( PrdOptVal8.option_type=1 AND PrdOptSet8.variantID=65)
 OR
 (PrdOptVal8.option_type=0 AND PrdOptVal8.option_value_ru LIKE '%до 1 Гб%')
 )) AND (
 PrdOptVal9.optionID=29
 AND
 (
 ( PrdOptVal9.option_type=1 AND PrdOptSet9.variantID=100)
 OR
 (PrdOptVal9.option_type=0 AND PrdOptVal9.option_value_ru LIKE '%aGPS%')
 )) AND (
 PrdOptVal10.optionID=31
 AND
 (
 ( PrdOptVal10.option_type=1 AND PrdOptSet10.variantID=34)
 OR
 (PrdOptVal10.option_type=0 AND PrdOptVal10.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal11.optionID=32
 AND
 (
 ( PrdOptVal11.option_type=1 AND PrdOptSet11.variantID=116)
 OR
 (PrdOptVal11.option_type=0 AND PrdOptVal11.option_value_ru LIKE '%ёмкостной%')
 )) AND (
 PrdOptVal12.optionID=36
 AND
 (
 ( PrdOptVal12.option_type=1 AND PrdOptSet12.variantID=91)
 OR
 (PrdOptVal12.option_type=0 AND PrdOptVal12.option_value_ru LIKE '%0,3 Мп%')
 )) AND (
 PrdOptVal13.optionID=38
 AND
 (
 ( PrdOptVal13.option_type=1 AND PrdOptSet13.variantID=39)
 OR
 (PrdOptVal13.option_type=0 AND PrdOptVal13.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal14.optionID=39
 AND
 (
 ( PrdOptVal14.option_type=1 AND PrdOptSet14.variantID=16)
 OR
 (PrdOptVal14.option_type=0 AND PrdOptVal14.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal15.optionID=40
 AND
 (
 ( PrdOptVal15.option_type=1 AND PrdOptSet15.variantID=36)
 OR
 (PrdOptVal15.option_type=0 AND PrdOptVal15.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal16.optionID=41
 AND
 (
 ( PrdOptVal16.option_type=1 AND PrdOptSet16.variantID=11)
 OR
 (PrdOptVal16.option_type=0 AND PrdOptVal16.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal17.optionID=42
 AND
 (
 ( PrdOptVal17.option_type=1 AND PrdOptSet17.variantID=29)
 OR
 (PrdOptVal17.option_type=0 AND PrdOptVal17.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal18.optionID=43
 AND
 (
 ( PrdOptVal18.option_type=1 AND PrdOptSet18.variantID=13)
 OR
 (PrdOptVal18.option_type=0 AND PrdOptVal18.option_value_ru LIKE '%есть%')
 )) AND (
 PrdOptVal19.optionID=15
 AND
 (
 ( PrdOptVal19.option_type=1 AND PrdOptSet19.variantID=5)
 OR
 (PrdOptVal19.option_type=0 AND PrdOptVal19.option_value_ru LIKE '%белый%')
 )) GROUP BY p.productID ORDER BY sort_order, in_stock DESC, _name_sort LIMIT 0,15

</pre>
<p><strong>38 LEFT JOIN&#8217;oв! </strong><em>(для понимания &#8212; 2 джоина = 0,02 сек, 4 джоина = 8,8 сек.)</em><br />
<strong>По два на каждый атрибут!</strong> Т.е. если у вас у товара хотя бы 5 атрибутов &#8212; готовьтесь к 10 JOIN&#8217;aм, которые положат вашу БД! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Я обратил внимание на <strong>543 и 512 строчки </strong>вышеупомянутого файла. Там расположено тело функции <em>_prepareSearchExtraParameters, </em>которая собственно и отвечает за поиск продуктов.</p>
<p>Что же такого в этих строчках? Объясню.<br />
Не знаю, для чего нужен был этот костыль, и возможно я не прав, за что заранее приношу свои извенения разработчикам, но <strong>в теле цикла, начинающего на 507 строке </strong>начинает генерироваться <strong>для каждого атрибута <em>2хJOIN LEFT, </em></strong>и при всем при этом присоединяется одна и та же таблица просто с каждым разом ее имя <em>PrdOptVal </em>инкрементируется (PrdOptVal1, PrdOptVal2). Как мы все знаем, <strong>JOIN&#8217;ы не самые легкие запросы, </strong>и для чего присоединять одну и ту же таблицу много раз?</p>
<p>Таким образом я пришел к выводу, что не все то хороший движок, что стоит <strong>7950 руб!</strong><br />
Вот так, дорогие друзья! Удачного кодинга и оптимизированного кода вам! <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Продолжение тут &#8212; <a title="WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript" href="http://nikita-sp.com.ua/2013/02/webasyst-naplevat-na-vladeltsev-shopscript-ili-kak-po.html" data-wpel-link="internal">WebAsyst наплевать на владельцев ShopScript или как положить БД владельца интернет-магазина ShopScript</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2013/02/poisk-produktov-po-atributam-v-webasyst-shopscript.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
