您的位置:首页 > 数据库

总结一下最近实践上用到的sql语句

2012-06-24 22:49 260 查看
// 最近写的一些sql语句,感谢上级指导。(写这个文章时还不知道查postgreSql的手册,浪费了上级的时间,如果当时上级直接发我手册就好了)

// (写这个文章时实践还太少。个人觉得学习sql语言的最好方法是实践加查手册,上网搜。下面字段k_rea从 1~10,所以用了循环。pgsql可以存数组,上级说这样设计是为了方便新人,"||"是pgsql用的连接符号。mysql虽然存不了数据,不过可以存php的序列化数据,但是要查询和批量显示和求和的话,还是要1~10这样存。下面sql语句就今天看来并不值得写个博客。)

//注意 $res是资源

foreach($res as $key=>$val)

{

$sql_select .= "case when m_k.k_rea{$val['code']}='1' then '{$val['name_short']}'||'/' else '' end||";

}

$sql_select .= "''";

$sql_select = "trim(trailing '/' from {$sql_select})";

/*

注:项目是用pg做的。有的sql语句别的数据库用不了。

因为要求传一句sql到我管不了的块,不能用php联,所以用到了case when 。

后面用了trim的语句进行了剪裁。

*/

$sql_select = "select m_k.k_code,sum(case when m_k.k_mf = 1 then 1 else 0 end) as cou_k1,sum(case when m_k.k_mf = 2 then 1 else 0 end) as cou_k2";

/*

你以为需要用两句sql的,再join一下。但在不需分主次的时候,case when 更简捷。

*/

$sql = "select * from (" . $sql_b . ")A left join (" . $sql_a . ")";

/*

需要分主次的时候就join一下。

$sql_a和$sql_b比较相同的地方是

$sql_select =...

$sql_group =...(group 和 order)

$sql_on =...(join on)...

我把这三句写在前面,好加分支语句。

不同的地方是select的一部分和where部分,写在分支后面,再合上去。

如果还要求不用php来判断空,那么前面的$sql = "select * from ("

这个*就要改成——COALESCE( B.cou_k1 , 0 )什么的。

一次把sql写清楚,避免以后php的大改,当然是很好的。

*/

//嗯,用了太多"号了,php中用"效率会差一些。——这句话好像没有依据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: