1. 代码:
  2. <?php
  3. //////////////////////////////////////////////////////////
  4. //
  5. //ダイハツ車種 car_cd毎 平均価格 JSON書き出しバッチ
  6. //
  7. //////////////////////////////////////////////////////////
  8. require_once ('/usr/daihatsu_web/HTTP_PHP/lib/common.php');
  9. require_once (F_LIB_COMM.'Db.php');
  10. define( 'MAP_LOCK_FILE', '/tmp/price_average_lock_file' );
  11. define( 'MAP_OUT_FILE' , F_LIB.'price_average.json' );
  12. //二重起動を防止するため
  13. if (file_exists(MAP_LOCK_FILE)){
  14. echo "Error,running......\n";
  15. exit;
  16. } else {
  17. touch(MAP_LOCK_FILE);
  18. }
  19. //DBクラスのインスタンス生成
  20. $db = new Db();
  21. // DB接続
  22. if ( -1 == $db->connect( DAIHATSU_DB ) ) {
  23. //connectionエラー
  24. echo"error connection!\n";
  25. exit;
  26. }
  27. print "開始".date("Y-m-d H:i:s")."\n";
  28. $sql = "SELECT z.n_p_brand_nm_n,z.n_car_cd,case when (z.n_car_cd in (10502004,10502018,10502014,10502020) and zk.custom_flg=0) then c.car_nm when (z.n_car_cd in (105020
  29. $result = $db->query( $sql );
  30. $car_cd_array = [];
  31. if (-1 != $result) {
  32. $count = pg_num_rows( $result );
  33. for ( $i = 0; $i < $count; $i++ ) {
  34. $all_average[$i] = pg_fetch_object( $result );
  35. array_push($car_cd_array,$all_average[$i]->n_car_cd);
  36. }
  37. }else{
  38. echo "error select!\n";
  39. exit;
  40. }
  41. $car_cd_str = implode(",",$car_cd_array);
  42. $sql_nenpi = "select car_cd,max(nenpi) from catalog_master where nenpi != '99999' AND car_cd in ($car_cd_str) group by car_cd";
  43. $result_nenpi = $db->query( $sql_nenpi );
  44. if(-1 != $result_nenpi){
  45. $nenpi_count = pg_num_rows( $result_nenpi );
  46. for( $i = 0; $i < $nenpi_count; $i++){
  47. $all_nenpi[$i] = pg_fetch_object($result_nenpi);
  48. }
  49. }else{
  50. echo "error select!\n";
  51. exit;
  52. }
  53. foreach ($all_average as $all_key => $all_val){
  54. foreach ($all_nenpi as $nenpi_key => $nenpi_val){
  55. if($nenpi_val->car_cd == $all_val->n_car_cd){
  56. $all_val->max = $nenpi_val->max;
  57. break;
  58. }
  59. }
  60. }
  61. $db->close();
  62. $json = arr_to_json($all_average);
  63. $length = file_put_contents(MAP_OUT_FILE, $json, LOCK_EX);
  64. if ($length > 100) {
  65. unlink(MAP_LOCK_FILE);
  66. }
  67. print "完了".date("Y-m-d H:i:s")."\n";
  68. exit;
  69. function convert_enc(&$value,$key,$enc) {
  70. $value = mb_convert_encoding($value,$enc->to,$enc->from);
  71. }
  72. function arr_to_json($dataArr,$fromenc='EUC_JP',$toenc='UTF-8') {
  73. $enc = new stdClass;
  74. $enc->from = $fromenc;
  75. $enc->to = $toenc;
  76. foreach ($dataArr as $val) {
  77. array_walk_recursive($val,'convert_enc',$enc);
  78. }
  79. $json_data = json_encode($dataArr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
  80. //$json_data = "{ record:".$json_data."}";
  81. return $json_data;
  82. }

这其中是根据SELECT z.n_p_brand_nm_n,z.n_car_cd,case when (z.n_car_cd in (10502004,10502018,10502014,10502020) and zk.custom_flg=0) then c.car_nm when (z.n_car_cd in (10502004,10502018,10502014,10502020) and zk.custom_flg=1) then c.car_nm||'カスタム' else c.car_nm end as car_nm ,  ceil(AVG(case z.price_jpn when 'ASK' then null else z.price end)/10000) as price_average FROM zaiko z,car_master c,zaiko_kubun zk WHERE z.n_brand_cd = c.brand_cd and z.n_car_cd = c.car_cd and z.goo_car_id = zk.goo_car_id and z.n_brand_cd = 1050 GROUP BY z.n_brand_cd,z.n_p_brand_nm_n,z.n_car_cd,c.car_nm,zk.custom_flg;
查询出的结果:

n_p_brand_nm_n | n_car_cd | car_nm | price_average
----------------+----------+------------------------+---------------
ダイハツ | 10501003 | シャレード | 126
ダイハツ | 10501004 | ミラ | 100
ダイハツ | 10501006 | クオーレ | 20
ダイハツ | 10501007 | リーザ | 48
ダイハツ | 10501008 | オプティ | 4000
ダイハツ | 10501010 | アルティス | 5518
ダイハツ | 10501012 | コペン | 2141
ダイハツ | 10501015 | エッセ | 55
ダイハツ | 10501017 | ミラココア | 109
ダイハツ | 10501018 | ミライース | 150
ダイハツ | 10501510 | ブーン | 20
ダイハツ | 10502001 | デルタワイドワゴン | 134
ダイハツ | 10502004 | ムーヴ | 174
ダイハツ | 10502004 | ムーヴカスタム | 138
ダイハツ | 10502009 | アトレーワゴン | 20
ダイハツ | 10502014 | タント | 180
ダイハツ | 10502014 | タントカスタム | 164
ダイハツ | 10502015 | ムーヴラテ | 30
ダイハツ | 10502016 | ビーゴ | 50
ダイハツ | 10502018 | ムーヴコンテ | 123
ダイハツ | 10502018 | ムーヴコンテカスタム | 41
ダイハツ | 10502020 | タントエグゼ | 170
ダイハツ | 10502020 | タントエグゼカスタム |
ダイハツ | 10502022 | ウェイク | 1290
ダイハツ | 10502023 | キャスト | 129
ダイハツ | 10503002 | アトレー | 13
ダイハツ | 10504111 | デルタトラック | 20
ダイハツ | 10504112 | ハイゼットトラック | 143
ダイハツ | 10507113 | ハイゼットグランカーゴ |
ダイハツ | 10507114 | ハイゼットカーゴ | 200
ダイハツ | 10507115 | ハイゼットバン |
(31 rows)

出现的问题就是根据sql语句查询出来的结果,通过batch执行后,会一次出现,一次消失,经过调查问题出现在sql语句上:

  1. select car_cd,max(nenpi) as nenpi from catalog_master where nenpi_wltc != '99999' AND car_cd in (10501003,10501004,10501006,10501007,10501008,10501010,10501012,10501015,10501017,10501018,10501510,10502001,10502004,10502004,10502009,10502014,10502014,10502015,10502016,10502018,10502018,10502020,10502020,10502022,10502023,10503002,10504111,10504112,10507113,10507114,10507115) group by car_cd;

<br>表内的这个字段多达几千条数据,但是where条件是and拼接的,查询时间可能过长 ,去掉 nenpi_wltc != '99999'这个条件就不会出现了。解决办法就是重新修改sql.

惭愧,找到最后发现的原因是开发环境下,做了负载均衡,存在两台服务器,测试时进行了改修数据,确只改修了其中一台,因此,查询会出现,两次结果不一致的情况。记录一下!加油

batch文件改修中遇到的sql问题的更多相关文章

  1. SQL Server Reporting Services:无法检索应用程序文件。部署中的文件已损坏

    如果在客户端计算机上启动Microsoft SQL Server 2012的 ClickOnce 版本的 Microsoft SQL Server 报表生成器时出现"无法检索应用程序文件.部 ...

  2. Delphi 7 在程序中直接执行SQL脚本文件

    Delphi 7 在程序中直接执行SQL脚本文件 在处理MSDE一些操作中.需要执行一些SQL脚本.有的是从SQLServer 2000中生成的SQL为后缀的脚本.在MSDE中没有企业管理器,操作都是 ...

  3. shell脚本中执行mysql sql脚本文件并传递参数

    1 shell 文件内容替换 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法. 调用sed命 ...

  4. docker中mysql导入sql文件

    1.先将文件导入到容器 docker cp **.sql [容器名]:/root/ 2.进入容器 docker exec -ti [容器名/ID]/bin/bash 3.将文件导入数据库 mysql ...

  5. mysql 中常用的 sql 语句

    SQL分类: DDL-----数据定义语言(CREATE--创建,ALTER--修改. DROP--删除表,DECLARE--声明) DML-----数据定义语言(SELECT--查询,DELECT- ...

  6. SQL Server中常用的SQL语句(转):

    SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...

  7. PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)

    PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...

  8. SQL*PLUS中批量执行SQL语句

    SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...

  9. win7+SQL2008无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever

    今天在win7+SQL2008的环境下操作分离附加数据库,分离出去然后再附加,没有问题.但是一把.mdf文件拷到其它文件夹下就出错,错误如下:无法打开物理文件 "E:\db\MyDB.mdf ...

随机推荐

  1. echarts_02

    1. 如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载. ECharts 默认有提供了一个简单的加载动画. ...

  2. div随窗口变化设置高度

    window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...

  3. SpringBoot&Dubbo&Zookeeper远程调用项目搭建

    序言 Dubbo一款分布式服务框架,作为阿里巴巴SOA服务化治理方案的核心框架,通过高性能和透明化的RPC实现服务的远程调用,对服务的负载均衡以及项目的耦合性提供很强的解决方式;具体Dubbo的介绍和 ...

  4. committed与urgent的区别

    Committed跟Urgent都是time automaton 中用来表示state的关键词. 它们的主要区别是: Committed前后的两个状态改变(transition)是串行发生,不可打断的 ...

  5. pandas中根据列的值选取多行数据

    # 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...

  6. Java学习之==>常用字符串方法

    1.定义字符串 // 定义, 为初始化 String str1; // 定义, 并初始化为null String str2 = null; // 定义, 并初始化为空串 String str3 = & ...

  7. C#程序 给IE网页IFRAME控件中所嵌入网页的元素赋值

    //引用COM组件//Microsoft HTML Object Library//Microsoft Internet Controls SHDocVw.ShellWindows shellWind ...

  8. [LeetCode] 373. Find K Pairs with Smallest Sums 找和最小的K对数字

    You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...

  9. PHP 异步执行方式

    在工作中我们经常遇到一些比较耗时的任务,比如用户注册发送邮件,审核短信通知等功能,同步执行这些功能的话,响应时间就会变长,所以一般我们会用队列去管理这些功能,但是如果条件不允许怎么办,今天get了一个 ...

  10. nginx优化方案

    一.nginx 配置文件中对优化比较有作用的为以下几项:1. worker_processes  8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). ...