mysql列转行可以通过concat,先分组然后连接。

show VARIABLES like '%group%'
set @@group_concat_max_len =
select @@group_concat_max_len SELECT GROUP_CONCAT(goods_id), as lzh FROM ts_goods
WHERE ts_goods.cat_id_1 = OR ts_goods.cat_id_2 = OR ts_goods.cat_id_3 =
group by lzh

这里默认的限制是1024字节,可以通过set调整一下。

想到这个的原因是mysql在执行in操作的时候,有时候外层表的数据量巨大,使用in子查询之后不是用外层索引,但是直接的使用字符串拼接会使用索引。

这里还有一个问题,就是in的子查询的where语句没有索引与有索引差别也挺大,使用exlpain extended查看的时候不添加索引会全表扫描外层表。

SELECT DISTINCT order_id FROM ts_order_goods  WHERE goods_id in
(
SELECT goods_id FROM ts_goods
WHERE ts_goods.cat_id_1 = OR ts_goods.cat_id_2 = OR ts_goods.cat_id_3 =
)

这里cat_id_1,cat_id_2,cat_id_3,没有索引的话ts_order_goods会all扫描100w行,如果有索引会使用index_marge,只有2k行。

而且上面的语句只是一个大查询的一个子查询,而且大查询的其他条件对这个子查询的优化结果也不同,mysql内部的优化机制挺复杂的,会根据整个执行的语句优化,根据结果集做优化判断。

上面的方法可以用到存储过程里面,这样就不用php去外层查询两次数据库,并拼接了。

CREATE PROCEDURE GetUsersDynamic(WhereCondition varchar(),OrderByExpress varchar())
begin
declare stmt varchar();
if LENGTH(OrderbyExpress)> then
begin
set @sqlstr=concat('select id,name,password,age,getdate(adddate) as AddDate from users where ',WhereCondition,' order by ',OrderByExpress);
end;
else
begin
set @sqlstr=concat('select id,name,password,age,getdate(adddate) as AddDate from users where ',WhereCondition);
end;
end if;
prepare stmt from @sqlstr;
execute stmt;
end;

注意,mysql里面varchar的长度是有限制的,所以不能拼接过长的数据。mysql的in可以转为join,或者exist。

求乘集的方法是临时想的,主要是通过log与power,因为logA+logB = logAB。

SELECT pow(, sum(log2(b))) from
(select as b union select union select ) as t

这样可以得到2*3*4=24

最新文章

  1. 通过ssh连接github
  2. 【JAVA线程间通信技术】
  3. 20145330《Java程序设计》第四次实验报告
  4. Android调试常用的工具简单介绍
  5. Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
  6. LINUX CACHE IO THREAD
  7. WCF之可靠性
  8. android view的setVisibility方法值的意思
  9. Leetcode OJ : Restore IP Addresses backtrack暴搜 C++ solution
  10. 2014-07-23 .NET实现微信公众号接入
  11. windows消息常量值
  12. MVC 数据列表显示插件大全
  13. js 报错 :object is not a function
  14. Ubuntu常用软件推荐,图文详细说明及下载
  15. ventBroker简单实现
  16. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象
  17. 微端游戏启动器launcher的制作(序篇)
  18. ubuntu输入某个目录测试该目录里.C文件里代码行数shell脚本
  19. GridView中添加行单击事件.md
  20. 详解vue移动端 下拉刷新

热门文章

  1. java 反射创建对象并传入参数
  2. 我是如何学习 Linux 的
  3. Quartz 2D Programming Guide
  4. web服务器【apache/nginx] 关闭目录的浏览权限
  5. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
  6. chrome开发配置(二)获取源代码
  7. Sass&Compass学习笔记(一)
  8. CrazePony飞行器--通信部分介绍【转】
  9. 命令 tar & zip
  10. 错误 -force-32bit 与 ANDROID_EMULATOR_FORCE_32BIT=true