我也是这样做的 同求!######很想帮你但是我看到PHP就头疼,你可以直接把sql分离出来吗~?######回复 @kstsca : 我不是学PHP的~要花时间去看你PHP代码就太浪费了~我意思是你吧最后拼出来的SQL代码打印出来!######所以出现了上面的 用in查询######主表goods 商品表
附表arr 商品属性表
譬如 goods id name 1 大神 arr表 id goodid(商品id) arrid(商品属性id) value(值) 1 1 1 ex 2 1 2 ex 3 1 3 ex 商品属性ID 1是切工 2是光泽 3是材质 现在我要查 切工ex 材质idea 的产品######可能还是涉及到 切工 ex idea 多值的查询
######试试这样做会不会比你的快. $sql_f.= ',(SELECT goods_id, attr_value AS cut FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' WHERE (attr_id=2'.$cut_where . ') or '. '(attr_id=3'.$color_where. ') or '. '(attr_id=6'.$symmetry_where . ') or '. ...... ') AS new_table_name';######要注意的是每次连表都有一个as######这效率又回老路了,感觉######这样好像缺一步,处理成新表后,如何再输出各商品值呢?######好的######代码看上去很熟悉,原来是ecshop
######回复 @kstsca : 看表名,字段名就知道了######回复 @kstsca : 肯定是ecs啦######这段代码应该不是ecshop写的,你看出来应该是表名吧######头大...表设计的有问题吧######这样设计很常规吧,应该把请求让php处理好,再写sql,但现在为了省时,想直接改sql优化######
引用来自“RickyFeng”的答案
试试这样做会不会比你的快. $sql_f.= ',(SELECT goods_id, attr_value AS cut FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' WHERE (attr_id=2'.$cut_where . ') or '. '(attr_id=3'.$color_where. ') or '. '(attr_id=6'.$symmetry_where . ') or '. ...... ') AS new_table_name';
改为以下方式: SELECT goods_id, attr_value AS cut FROM ' . $GLOBALS['ecs']->table('goods_attr') .' WHERE attr_id=2'.$cut_where.' UNION ALL SELECT goods_id, attr_value AS color FROM ' . $GLOBALS['ecs']->table('goods_attr') .' WHERE attr_id=3'.$color_where.' ....... ######还是谢谢热心关注我的提问。。######感觉上去 效率应该差不多的,呵呵,回去试试看######继续呼唤sql牛人 ######终极解决方法: 1:把所有数据弄到一张表里面 --- 不冗余,不是mysql, mysql根本不是数据库 2:换数据库 ######回复
@HelloChina : 总比浪费生命时光好。垃圾的mysql不支持交集运算,只能把数据取出来在应用层做集合运算。想着就蛋痛。######又看到宏哥 在让人还数据库了######回复
@kstsca : 坦率的说,这个问题无解. 你的sql 并没有什么问题. 问题在于mysql缺乏集合运算能力.######这方法太耗时了,再说一个布怎么重要客户的,没这么大费周章,现在想让那位sql牛人看看,是否优化下sql语句