1. YII 使用原生SQL
1.1查询单个表
1.1查询单个表
//查表得到 svn path
$connection = Yii::app()->db;
$sql = "SELECT * FROM code_coverage_project WHERE id = $code_id LIMIT 1 ";
$command = $connection->createCommand($sql);
$rows = $command->queryAll();
$count_rows = count($rows);
//异常处理
if (0 == $count_rows)
{
$msg = Yii::t('TOAST', 'No Result For The Code Id!');
header('Content-type: text/html; charset=UTF-8');
echo json_encode(array('error' => 1, 'message' => $msg));
exit;
}
$svn_path = $rows[0]['path']; //异常检测
1.2查询多个表
/*
*@根据类名,查找对应版本的覆盖率
*
*@$code_id = 393;
*@$version_1 = 119577;
*@$version_2 = 120046;
*@$classname = $array_filtered_calsses[0][0];
*@print_r($classname);
*@return;
*
*/
$connection = Yii::app()->db;
$sql_class_and_versions = "SELECT code_coverage.reversion_id,
code_qulity_class_covery.id,
code_qulity_class_covery.classname,
code_qulity_class_covery.linecoverd,
code_qulity_class_covery.linemissed,
code_qulity_class_covery.coverdrate
FROM
code_qulity_class_covery
LEFT JOIN code_coverage
ON
code_qulity_class_covery.code_covery_id = code_coverage.id
WHERE
code_coverage.code_project_id = $code_id AND
code_coverage.reversion_id IN ($version_1, $version_2) AND
code_qulity_class_covery.classname IN ($classname_for_sql_in); ";
$command_for_calss_and_versions=$connection->createCommand($sql_class_and_versions);
$rows_for_calss_and_versions = $command_for_calss_and_versions->queryAll();
$count_rows = count($rows_for_calss_and_versions);
if (0 == count($rows_for_calss_and_versions))
{
$msg = Yii::t('TOAST', "Sorry,no record matches in the database!");
header('Content-type: text/html; charset=UTF-8');
echo json_encode(array('error' => 1, 'message' => $msg));
exit;
}
2. 有关正则
/*
* 从变动的文件列表提取类名
*/
$count = 0;
$array_dot_java = array();
$array_change_classname = array();
$pattern_java = '/.*java$/';
$pattern_for_calss ='/cn\/com.*\/[A-z]*/';
foreach ($arr_change_files as $values)
{
if(preg_match($pattern_java,$values)) //过滤得到.java结尾的记录
{
$array_dot_java[] = $values;
if(preg_match($pattern_for_calss,$values,$matchs)) //过滤得到类名
{
$matchs[0]=preg_replace('/\//', '.', $matchs[0]); // 替换类名中的 “/"
$array_change_classname[] = $matchs;
}
}
}
if (0 == count($array_change_classname))
{
$msg = Yii::t('TOAST', "No class changes between the tow versions!");
header('Content-type: text/html; charset=UTF-8');
echo json_encode(array('error' => 1, 'message' => $msg));
exit;
}
//根据package name 过滤 classname
$array_filtered_calsses = array();
$pattern_to_filter_class = "/.*$package_name.*/"; // cn.com.autofans.user.service.imp
foreach($array_change_classname as $valus_to_filter_class)
{
if(preg_match($pattern_to_filter_class,$valus_to_filter_class[0]))
{
$array_filtered_calsses[] = $valus_to_filter_class;
}
}
if (0 == count($array_filtered_calsses))
{
$msg = Yii::t('TOAST', "No classes matches the packet that post from pages!");
header('Content-type: text/html; charset=UTF-8');
echo json_encode(array('error' => 1, 'message' => $msg));
exit;
}
3. array()处理
/*
* 查询结果解析转换为 符合json的形式
* $version_1 = 119577;
* $version_2 = 120046;
*/
$r_version_1 = "r".$version_1;
$r_version_2 = "r".$version_2;
$arr_json_classname = array();
$arr_json_rate = array();
$arr_just_rate = array();
$arr_json_rate[$r_version_1] = array();
$arr_json_rate[$r_version_2] = array();
foreach($array_filtered_calsses as $values_switch_to_json)
{
$arr_json_classname [] = $values_switch_to_json[0]; //类名处理
$arr_just_rate[$version_1] [$values_switch_to_json[0]] = 0;
$arr_just_rate[$version_2] [$values_switch_to_json[0]] = 0;
}
foreach ($arr_json_classname as $values_calssname)
{
foreach($rows_for_calss_and_versions as $values_switch_to_json_rate)
{
if($version_1 == $values_switch_to_json_rate['reversion_id'])
{
if ($values_calssname == $values_switch_to_json_rate ['classname'])
{
$arr_just_rate [$version_1][$values_calssname] = $values_switch_to_json_rate['coverdrate'];
}
}
if($version_2 == $values_switch_to_json_rate['reversion_id'])
{
if ($values_calssname == $values_switch_to_json_rate ['classname'])
{
$arr_just_rate [$version_2][$values_calssname] = $values_switch_to_json_rate['coverdrate'];
}
}
}
}
foreach ($arr_just_rate [$version_1] as $value_last)
{
$arr_version_1 []= floatval($value_last);
}
foreach ($arr_just_rate [$version_2] as $value_last)
{
$arr_version_2 []= floatval($value_last);
}
foreach($arr_json_classname as $value_to_cut_classname)
{
$pattern = "/".$package_name."./";
$replacement = '';
$temp_classname = preg_replace($pattern,$replacement,$value_to_cut_classname);
$array_just_classname [] = $temp_classname;
}
$data_temp = array($r_version_1 => $arr_version_1,$r_version_2 =>$arr_version_2 );
$xaxis = $array_just_classname;
$data = $data_temp;
// $xaxis = array( 'class A', 'class B', 'class C', 'Class D', 'Class E' );
// $data = array( 'r12345'=>array(48.9, 38.8, 39.3, 41.4, 47.0), 'r67890'=>array(62.4, 53.2, 54.5, 59.7, 72.6));
echo json_encode(array('xaxis'=>$xaxis, 'coverdata'=>$data));