xiong's profile在河里抓鱼的熊PhotosBlogListsMore Tools Help

在河里抓鱼的熊

xiong qian

some blogspot

Loading...Loading...
感谢朋友们的访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.
August 26

另一个更高效的sql

以下是我在项目中的统计模块中使用的SQL操作,每一个统计仅使用了一条语句。其中有一个PHP变量($lastDay)其实也可以在SQL中生成,只是这样使语句变得更加复杂了,并且出于效率考虑,使用了PHP变量。
统计一:
insert into ad_stat_ad_particular
        (s_ad_date, ad_id, s_ad_issuetime, s_ad_flash, s_ad_aflash, s_ad_rflash, s_ad_hit, s_ad_ahit, s_ad_must_income, s_ad_already_income)
                select {$lastDay['start']}, dz.ad_id, dz.s_ad_adz_issuetime, sum(dz.s_ad_adz_flash), sum(dz.s_ad_adz_aflash), sum(dz.s_ad_adz_rflash), sum(dz.s_ad_adz_hit), sum(dz.s_ad_adz_ahit), iti.isin_must_income, isin_must_income/isin_must_wastage*IF(sum(dz.s_ad_adz_rflash)>iti.isin_must_wastage, iti.isin_must_wastage, sum(dz.s_ad_adz_rflash))
                from ad_stat_ad_adz_particular dz
                        LEFT JOIN ad_issuetime_info iti
                        ON (iti.ad_id=dz.ad_id AND dz.s_ad_adz_issuetime=iti.ad_issuetime)
                where s_ad_adz_date between {$lastDay['start']} and {$lastDay['end']}
                group by ad_id, dz.s_ad_adz_issuetime
                order by dz.ad_id, dz.s_ad_adz_issuetime;

解释如下:
使用"select...from ... left join on() where group by order by"查询出来的结果做为insert into 的内容。其中的select项中使用了sum(),四则运算和判断。语句拆解之后还是相对简单的。

统计二:
SELECT @deduct:=spar_value FROM ad_sys_parameter WHERE spar_name='deduct';
SELECT @proportionment:=spar_value FROM ad_sys_parameter WHERE spar_name='proportionment';
INSERT INTO ad_stat_adz_particular (`s_adz_date`,`adz_id`,`s_adz_pv`,`s_adz_apv`,
                        `s_adz_dpv`,`s_adz_hit`,`s_adz_ahit`,`s_adz_dhit`,
                        `s_adz_payable`,`s_adz_deduct_amount`,`s_adz_proportionment`)
                SELECT {$lastDay['start']}, dz.adz_id, sum(dz.s_ad_adz_pv), sum(dz.s_ad_adz_apv),
                        sum(dz.s_ad_adz_apv)*(100-@deduct)/100, sum(dz.s_ad_adz_hit), sum(dz.s_ad_adz_ahit), sum(dz.s_ad_adz_ahit)*@deduct/100,
                        sum(dz.s_ad_adz_apv*iti.isin_must_income/iti.isin_must_wastage), sum(dz.s_ad_adz_apv*iti.isin_must_income/iti.isin_must_wastage)*(100-@deduct)*@proportionment/10000,
                        sum(dz.s_ad_adz_apv*iti.isin_must_income/iti.isin_must_wastage)*@proportionment/100
                FROM ad_stat_ad_adz_particular dz
                        LEFT JOIN ad_issuetime_info iti
                        ON (iti.ad_id=dz.ad_id AND dz.s_ad_adz_issuetime=iti.ad_issuetime)
                WHERE s_ad_adz_date between {$lastDay['start']} and {$lastDay['end']}
                GROUP BY adz_id;
这次有三句。第一、二句是获取两个值,以便下面使用。第三句与上面的构造方法一样,就不再做解释了。

以上的统计一与统计二执行一次十万条数据内容的表总共用时2-3秒。还是挺有效率的吧,如果还有可优化之处,请告之。



August 19

很久没有在这里写东西了

很久没有在windows Live里面写东西了,主要因为livespace太慢,影响使用;其次,自己比较自闭,不愿意把自己的想法放到网上让大家看到。尤其是近两年美国片看多了,所以对自己的暴露于外的程度有所保留。
但自己的想法往往会自相矛盾:一方面希望能更多的了解别人;而另一方面却又希望别人不能随意的了解到我,朋友除外。所以计划多弄几个空间,一个做为交流情感、发布消息的地方,一个做为工作备忘,一个做为私人所有。可惜的是,现在我所用的几个空间都不太好用。blogspot常常被封,livespace太慢,ncp又太乱,我不太喜欢ncp中的地方,是Y!一向的粗旷的风格,虽然这是我参与开发的。自己曾想买个100M的PHP空间放个wordpress,但一直没有找到合适的,而且wp有很多不及ncp/blogspot的地方。看来我是太期望完美了,结果一事无成!
谈谈近况吧,也好给朋友们一个交待。
从7月离职后,在家休养了一段时间,眼睛不像以前那样疼了。没事的时候总会突发奇想,于是看了好几部连续剧:《追》《奋斗》《越犾》,个人看法留着另说。通过这段时间的调整,把自己的生物钟调成了GMT+10了,甚至更远;另外,年前买了相机,顺便学了点摄影知识,虽然家用自动相机不是学摄影的最佳选择,但也能学点,拍了点比较满意的照片,待会传上来。还有一位在东南亚出差的朋友不知道回来了没有,希望没被人妖收去做了徒弟!

August 12

访问blogspot.com

好久不能访问我在google博客了,原来以为是blogspot.com暂停了服务,可这么长时间了,还是没有恢复,一查,才知道是电信部门把blogsopt.com的DNS给屏蔽了,现在把访问方法做个备份。如果偶尔能帮得上别人的忙,那更好,算是我积德吧!

修改host文件:
windows: %systemroot%\system32\drivers\etc\hosts
*nix:/etc/hosts
添加一行:72.14.219.190 qian-xiong.blogspot.com
June 30

高效的sql语句

SELECT b.subject_name s_name, sum(a.click_no) c_no FROM sys_subject b, article_click_day a WHERE a.subject_id=b.subject_id AND b.chanel_id=1 GROUP BY a.subject_id;
这条语句执行一遍只需要2.9m,但用PHP多步操作实现相同的功能却需要20多秒。天壤之别!
下面的代码就是用PHP多部操作实现的原文,做个纪念:

function getAllSubject($channel_id){
    $sql = "SELECT subject_id FROM sys_subject WHERE chanel_id=$channel_id";
    $data = gQuery($sql);
    return $data;
}


function getClickNum($subject_id){
    global $channel_id;
    $sql = "SELECT sum(click_no) FROM article_click_day WHERE subject_id=$subject_id AND channel_id=$channel_id";
    $data = gQuery($sql);
    /*
    //print_r($data);
    $rTemp = 0;
    echo count($data);
    for ($i=0; $i<=count($data)-1; $i++){
        $rTemp +=  $data[$i]['click_no'];
    }
    * /
    //return $rTemp;
    //print_r($data);
    return 1;
    return $data[0]['sum(click_no)'];
}

function getSubjectName($subject_id){
    $sql = "SELECT subject_name FROM sys_subject WHERE subject_id=$subject_id";
    $data = gQuery($sql);
    //print_r($data);
    return $data[0]['subject_name'];
}

function visitsort(&$subjectAll, &$arr_subject, &$arr_click, &$visit_per){
    global $channel_id;
    $arr_subject = array();    //栏目名称数组
    $subjectAll = getAllsubject($channel_id);
    $click_no_all = 0;
    $visit_per = array();
    //print_r($subjectAll);
    //echo count($subjectAll);

    for ($i=0; $i<count($subjectAll); $i++){
        $arr_subject[] = getSubjectName($subjectAll[$i]['subject_id']);
        $arr_subject_id[] = $arr_subject[$i];
    }
        $arr_click[] = getClickNum($subjectAll[$i]['subject_id']);
        $click_no_all += $arr_click[$i];
    for ($i=0; $i<count($subjectAll); $i++){
        $visit_per[$i] = round($arr_click[$i]/$click_no_all*100);
    }
}
June 21

Fedora Core 6 下安装ntfs支持

NTFS文件系统读写支持
默认的内核没有加入对于NTFS文件系统的读写支持,但是Fedora Extras仓库中已经包含了支持官方发行的内核对应的NTFS支持包,可以选择安装。
# yum install fuse fuse-libs ntfs-3g ntfsprogs ntfsprogs-gnomevfs
来完成安装。使用NTFS分区,例如,
# mount -t ntfs-3g -rw -o umask=0000 /dev/hda1 /media/c_driver
注意umask的设置。如果你使用的不是Fedora官方的内核,可能会有问题,请谨慎尝试。
使用NTFS的写功能是有风险的!!!
 
夜色  
Photo 1 of 4