ECOS电商系统交流论坛-Shopex开源网站官方论坛's Archiver

老杨 发表于 2017-10-13 14:41

让ecshop可以按属性编号/货号,即product_sn搜索的最简方法【老杨教你正确方式避坑】

[i=s] 本帖最后由 老杨 于 2017-10-13 16:07 编辑 [/i]

原文链接:[url]http://www.lyecs.com/article/w-254.html[/url]
ecshop可以关键词搜索商品规格属性编号,即按product_sn搜索

网上的教程老杨也有看过,只能说一个字:坑,网上的方法基本就是如下:[code] "LEFT JOIN " . $GLOBALS['ecs']->table('products') . " AS p ". [/code]即左插入一个products表,然后查询、、、、、、

大哥,mysql你用了group by吗?你用了distinct吗?好,你就算用了,效率在哪,products的一个商品如果有上百个货号呢??
(另外给各位补充个小冷门,关于group by和distinct,如果数据量小,查询效率是比IN要高**的,但如果数据量大,会严重吃CPU和内存,(但速度还是会比IN快),切记)

好了,不吐槽了,直接上代码:

找到search.php里的以下代码:[code]            $db->autoReplace($ecs->table('keywords'), array('date' => local_date('Y-m-d'),
                'searchengine' => 'lyecs', 'keyword' => addslashes(str_replace('%', '', $val)), 'count' => 1), array('count' => 1));
[/code]在下面添加:[code]            $sql = "SELECT goods_id FROM " .$GLOBALS['ecs']->table('products'). " WHERE product_sn LIKE '%$val%'";
            $product_goods_ids = $db->getCol($sql);
            foreach ($product_goods_ids as $v) {
                $goods_ids[] = $v;
            }[/code]纳尼,这么简单??就是这么简单,你以为呢?
================================
原理说一下:ec原本有tag功能,查到后会存入$goods_ids,然后在搜索时,相当于 OR goods_id IN (*****),我们只是利用了一下这个功能,最大化的简化了代码

老杨 发表于 2017-10-13 14:52

[url]www.lyecs.com[/url]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.