batch文件改修中遇到的sql问题
代码:
<?php
//////////////////////////////////////////////////////////
//
//ダイハツ車種 car_cd毎 平均価格 JSON書き出しバッチ
//
//////////////////////////////////////////////////////////
require_once ('/usr/daihatsu_web/HTTP_PHP/lib/common.php');
require_once (F_LIB_COMM.'Db.php');
define( 'MAP_LOCK_FILE', '/tmp/price_average_lock_file' );
define( 'MAP_OUT_FILE' , F_LIB.'price_average.json' );
//二重起動を防止するため
if (file_exists(MAP_LOCK_FILE)){
echo "Error,running......\n";
exit;
} else {
touch(MAP_LOCK_FILE);
}
//DBクラスのインスタンス生成
$db = new Db();
// DB接続
if ( -1 == $db->connect( DAIHATSU_DB ) ) {
//connectionエラー
echo"error connection!\n";
exit;
}
print "開始".date("Y-m-d H:i:s")."\n";
$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
$result = $db->query( $sql );
$car_cd_array = [];
if (-1 != $result) {
$count = pg_num_rows( $result );
for ( $i = 0; $i < $count; $i++ ) {
$all_average[$i] = pg_fetch_object( $result );
array_push($car_cd_array,$all_average[$i]->n_car_cd);
}
}else{
echo "error select!\n";
exit;
}
$car_cd_str = implode(",",$car_cd_array);
$sql_nenpi = "select car_cd,max(nenpi) from catalog_master where nenpi != '99999' AND car_cd in ($car_cd_str) group by car_cd";
$result_nenpi = $db->query( $sql_nenpi );
if(-1 != $result_nenpi){
$nenpi_count = pg_num_rows( $result_nenpi );
for( $i = 0; $i < $nenpi_count; $i++){
$all_nenpi[$i] = pg_fetch_object($result_nenpi);
}
}else{
echo "error select!\n";
exit;
}
foreach ($all_average as $all_key => $all_val){
foreach ($all_nenpi as $nenpi_key => $nenpi_val){
if($nenpi_val->car_cd == $all_val->n_car_cd){
$all_val->max = $nenpi_val->max;
break;
}
}
}
$db->close();
$json = arr_to_json($all_average);
$length = file_put_contents(MAP_OUT_FILE, $json, LOCK_EX);
if ($length > 100) {
unlink(MAP_LOCK_FILE);
}
print "完了".date("Y-m-d H:i:s")."\n";
exit;
function convert_enc(&$value,$key,$enc) {
$value = mb_convert_encoding($value,$enc->to,$enc->from);
}
function arr_to_json($dataArr,$fromenc='EUC_JP',$toenc='UTF-8') {
$enc = new stdClass;
$enc->from = $fromenc;
$enc->to = $toenc;
foreach ($dataArr as $val) {
array_walk_recursive($val,'convert_enc',$enc);
}
$json_data = json_encode($dataArr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
//$json_data = "{ record:".$json_data."}";
return $json_data;
}
这其中是根据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语句上:
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问题的更多相关文章
- SQL Server Reporting Services:无法检索应用程序文件。部署中的文件已损坏
如果在客户端计算机上启动Microsoft SQL Server 2012的 ClickOnce 版本的 Microsoft SQL Server 报表生成器时出现"无法检索应用程序文件.部 ...
- Delphi 7 在程序中直接执行SQL脚本文件
Delphi 7 在程序中直接执行SQL脚本文件 在处理MSDE一些操作中.需要执行一些SQL脚本.有的是从SQLServer 2000中生成的SQL为后缀的脚本.在MSDE中没有企业管理器,操作都是 ...
- shell脚本中执行mysql sql脚本文件并传递参数
1 shell 文件内容替换 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法. 调用sed命 ...
- docker中mysql导入sql文件
1.先将文件导入到容器 docker cp **.sql [容器名]:/root/ 2.进入容器 docker exec -ti [容器名/ID]/bin/bash 3.将文件导入数据库 mysql ...
- mysql 中常用的 sql 语句
SQL分类: DDL-----数据定义语言(CREATE--创建,ALTER--修改. DROP--删除表,DECLARE--声明) DML-----数据定义语言(SELECT--查询,DELECT- ...
- SQL Server中常用的SQL语句(转):
SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...
- PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)
PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...
- SQL*PLUS中批量执行SQL语句
SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...
- win7+SQL2008无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
今天在win7+SQL2008的环境下操作分离附加数据库,分离出去然后再附加,没有问题.但是一把.mdf文件拷到其它文件夹下就出错,错误如下:无法打开物理文件 "E:\db\MyDB.mdf ...
随机推荐
- 排序算法总结(java实现)
排序算法 介绍:排序分为内部排序和外部排序,内部排序指在内存中进行的排序过程:外部排序指在外存中进行排序的过程,但是此过程建立在多次访问内存的基础上(分成一段段利用内部排序进行排序). 以下排序均属于 ...
- 获取<a>标签值</a>的标签值及更改
html代码: <a id="catelogue_div1_h5" onclick="catelogue_div1(event)">隐藏</a ...
- MySQL 数据库 常用函数
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...
- 浅谈Uep分页查询
<hy:ajaxgrid id="unitGrid" showpagerbar="true" name="unitWrap" show ...
- 迭代器(Iterator)的使用
迭代器(Iterator)的使用 我这里主要讲一下聚合式迭代器(IteratorAggregate) 因为聚合式迭代器和ArrayIterator配合使用可以直接跳过Iterator需要实现的5个方法 ...
- DeepFaceLab参数详解之Batch-Size的使用和取值!
Batch-Size简称BS. 这是一个非常常见的参数,所有模型都具备的一个参数. 这其实是深度学习中的一个基础概念.要说理论可以说出一大堆,大家可以先简单的理解为一次处理的图片张数.为了防止吓跑小白 ...
- C++面向对象实践
实践如下: class Person{ private: int age; ]; int hight; public: Person(int age, int hight, char* name); ...
- VC++获取CPU序列号 CPU ID
CString strCPUID; unsigned long s1, s2; __asm{ mov eax, 01h xor edx, edx cpuid mov s1, edx mov s2, e ...
- 开源控件slidingmenu的使用
在github.com网站搜索slidingmenu后https://github.com/jfeinstein10/SlidingMenu 下载demo,导入library到你的项目中,添加到你项目 ...
- zk 文件存储
zk 有 2 种文件,快照和事务日志,快照是某一时刻的全量数据,事务日志中记录了数据的修改事件. 快照的文件名是 snapshot.zxid,zxid 是当前最大的事务 id // org.apach ...