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.
惭愧,找到最后发现的原因是开发环境下,做了负载均衡,存在两台服务器,测试时进行了改修数据,确只改修了其中一台,因此,查询会出现,两次结果不一致的情况。记录一下!加油
最新文章
- 自己写一个 jQuery 插件
- 在Page_Loaded下删除PivotItem出错的解决方案
- OA项目笔记-从建立接口 dao impl action jsp等框架实现crud
- 搭建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例
- MyBatis特殊字符转义
- Tomcat入门指南
- M1-S70卡片介绍
- snmp安装配置
- android 写文件权限
- STM8S TIM1 PWM初始化设置
- 模拟post请求-->;测试api是否可用-->;再交给ios开发
- 【poj解题】1028
- iOS网络编程笔记——GCDAsyncSocket使用
- Just a Hook(区间set)
- lesson - 11 正则表达式
- 配置文件错误导致jenkins无法启动 org.xmlpull.v1.XmlPullParserException: only 1.0 is supported as <;?xml version not &#39;1.1&#39; (position: START_DOCUMENT seen <;?xml version=\&#39;1.1\&#39;... @1:19)
- ELK搭建<;三>;:安装Kibana
- 初用jdbc来运行事务
- python 字典详细使用
- “一切都是消息”--iMSF(即时消息服务框架)入门简介
热门文章
- 最近给几个CRM软件配套开发了Outlook插件,讲讲Outlook插件开发注意事项
- <;img>;的title和alt有什么区别
- python学习之内存驻留机制简述
- LeetCode.1002-寻找共有字符(Find Common Characters)
- Java 8中处理集合的优雅姿势——Stream
- 【安卓开发】一个简单快递查询APP实例的实现摘要
- css3实现倾斜转动的转盘
- 【Angular5】 返回前一页面 go back to previous page
- [ASP.NET] 前台代码绑定后台变量方法总结 [转]
- MSF魔鬼训练营第一章 初识Metasploit