728x90


$query = "
select
SQL_CALC_FOUND_ROWS
*
, ifnull(mic1.ctgr_name, '') as ctgr_name1
, ifnull(mic2.ctgr_name, '') as ctgr_name2
, ifnull(mic3.ctgr_name, '') as ctgr_name3
from
(
select
@rownum:=@rownum+1 as num
, mi.*
, ifnull((select sum(qty) as sum_total from test_11 ahs where ahs.it_11 = mi.it_22 group by pp_id ), 0) as sum_total
from test_dd mi
,(SELECT @rownum:=0) r
where mi.it_no > 0
and mi.it_use_yn = 'Y'
";
if (!empty($search['sch_it_nm'])) {
$query .= " and it_nm like '%".$search['sch_it_nm']."%'";
}
if (!empty($search['sch_it_div'])) {
$query .= " and it_div = '".$search['sch_it_div']."'";
}
$query .= " and it_use_yn ='Y'";
$query .= "
order by mi.it_no asc
)ee
left outer join test_dd_category mic1 on mic1.ctgr_deg='1' and ee.clt_ctgr1 = mic1.ctgr_code
left outer join test_dd_category mic2 on mic2.ctgr_deg='2' and concat(ee.clt_ctgr1,ee.clt_ctgr2) = mic2.ctgr_code
left outer join test_dd_category mic3 on mic3.ctgr_deg='3' and concat(ee.clt_ctgr1,ee.clt_ctgr2) = mic2.ctgr_code and concat(ee.clt_ctgr1,ee.clt_ctgr2,ee.clt_ctgr3) = mic3.ctgr_code
order by num desc
limit ".$rowno." , ".$rowperpage."
";
$result['page_list'] = $this->db->query($query)->result_array();
$result['total_cnt'] = $this->db->query("SELECT FOUND_ROWS() AS total_cnt;")->row()->total_cnt;
return $result;
// SQL_CALC_FOUND_ROWS : LIMIT 0, 10을 지정하여 10개의
// row만 가져온다고 하더라도 LIMIT이 없을 때의 쿼리 결과와 같은 row 수를 계산하여 가져온다
■ IFNULL
SELECT IFNULL(필드명, "대체할 값") FROM 테이블명;
은 해당 필드의 값이 NULL을 반환할때 다른 값으로 출력할 수 있도록 하는 함수이다.
■ LADP / RADP

■ insert Code
public function insert(){
$insert_id = 0;
try{
$insertParam = func_get_arg(0);
//Trans
$this->db->trans_start();
$this->db->insert($this->table, $insertParam);
$insert_id = $this->db->insert_id();
//Trans commit
$this->db->trans_complete();
// $this->lastQuery();
// exit();
} catch (MY_Exception $e) {
$this->db->trans_rollback();
throw new MY_Exception(__FUNCTION__.$e->getMessage());
}
return $insert_id;
}
■ select
public function osJoinList($page = 1, $pageList = 5, $search){
//Paging
if(is_numeric($page) == false) $page = 1;
if($page < 0) $page = 1;
$limit_ofset = ($page-1) * $pageList;
$query = "
select
SQL_CALC_FOUND_ROWS
*
, mc.emp_dd , mc.clt_dd , mc.sale_dd
from
(
select
@rownum:=@rownum+1 as num
, mqo.*
from test_order mqo
,(SELECT @rownum:=0) r
where mqo.qte_ord_no > 0
";
if (!empty($search['startdate']) && !empty($search['enddate'])) {
$query .= " AND (concat(sale_year, '-', sale_month, '-', LPAD(sale_day, 2, 0)) BETWEEN '{$search['startdate']}' AND '{$search['enddate']}') ";
}
$query .= "
order by mqo.ord_no asc
)ee
left outer join test22 mc on mc.ord_no = ee.ord_no
order by num desc
limit ".$limit_ofset." , ".$pageList."
";
// $this->echo_r($query);
// exit();
$result['page_list'] = $this->db->query($query)->result_array();
$result['total_cnt'] = $this->db->query("SELECT FOUND_ROWS() AS total_cnt;")->row()->total_cnt;
return $result;
}
■ sql select 결과를 insert
INSERT INTO test_release ( no_1 ,no_2 ,no_3)
SELECT
j.job_no
,NOW()
,j.select_id
FROM test22 b INNER JOIN job_cc j ON b.it_11 =j.it_22
WHERE j.job_no=158;
■ sql update
/**
* @param $qty
* @param $test_no
* @return mixed
* @throws MY_Exception
*/
public function minusQty($qty, $test_no){
try {
$query = "update ".$this->table."
set qty = qty - '".$qty."'
";
$query .= " where test_no = '".$test_no."'";
$resultSet = $this->db->query($query);
} catch (MY_Exception $e) {
throw new MY_Exception(__FUNCTION__.$e->getMessage());
}
return $resultSet;
}
■ sql union insert
INSERT INTO test_ddd ( it_id , test_nm )
SELECT it_id, test_nm
FROM test_sss A
, (SELECT '사유1' as test_nm
UNION ALL
SELECT '사유2'
UNION ALL
SELECT '사유3'
UNION ALL
SELECT '사유4'
UNION ALL
SELECT '사유5'
UNION ALL
SELECT '사유6'
UNION ALL
SELECT '사유7'
) B
WHERE it_check IN ('pr11','pr22')
■ sql key 이용하여 select 한뒤 insert 또는 update
$query = "
INSERT INTO test_summary
(
id_11,
id_22,
id_33,
id_44,
id_55,
id_66,
id_77
)";
$query .= " VALUES ";
$query .= " ( ";
$query .= " '{$id_11}', ";
$query .= " '{$id_22}', ";
$query .= " '{$id_33}', ";
$query .= " '{$id_44}', ";
$query .= " '{$id_55}', ";
$query .= " '{$id_66}', ";
$query .= " now() ";
$query .= " ) ";
$query .= " ON DUPLICATE KEY UPDATE "; //key 를 제외한 나머지 컬럼 나열
$query .= " ppk_qty = VALUES (ppk_qty),";
$query .= " ppk_s_qty = VALUES (ppk_s_qty),";
$query .= " ppk_plan = VALUES (ppk_plan),";
$query .= " ppk_time = VALUES (ppk_time),";
$query .= " ppk_time = VALUES (ppk_time)";
$this->db->query($query);
■ sql 컬럼 추가, 삭제 , 수정
== 컬럼 추가 ==
ALTER TABLE test_order
add test_type ENUM('ss1','ss2') DEFAULT 'ss1' comment '컬럼을 추가1';
ADD test_column INT(11) DEFAULT 0 comment '컬럼을 추가2',
ADD test_ss DATE NULL DEFAULT NULL COMMENT '컬럼을 추가3';
https://extbrain.tistory.com/39
■ sql 예시
public function list($page = 1, $pageList = 5, $search){
//Paging
if(is_numeric($page) == false) $page = 1;
if($page < 0) $page = 1;
$limit_ofset = ($page-1) * $pageList;
//# 1. 쿼리형
$query = "
select
SQL_CALC_FOUND_ROWS
*
, mc.s_name
from
(
select
@rownum:=@rownum+1 as num
, mso.*
, IFNULL((
select sum(qty) as order_qty from test_ss sh
right outer join test_ddc mit on mit.it_id = sh.it_id
where sh.sale_ord_no = mso.sale_ord_no and mit.it_div in ('prdc','smpd')
),0 ) AS order_qty
, IFNULL((select sum(qty) as ship11_qty from testip_dss sh where sh.sale_ord_no = mso.sale_ord_no ),0) AS ship_order_qty
, IFNULL((select count(status) as status from testip_sds sh where sh.sale_ord_no = mso.sale_ord_no and status='start' GROUP BY sale_ord_no),0) AS status
, (SELECT round(SUM(request),4) AS need_ss FROM (
SELECT
IFNULL((
SELECT sum((seq.make_moq / mi.moq_qty) * si.qty) from test_seq seq where seq.it_id = si.it_id
) , 0 ) AS request
, si.sale_ord_no
from test_cc si
LEFT OUTER JOIN test_dd mi ON mi.it_id = si.it_id where mi.it_div in ('ss11','ss22')
) ss where ss.sale_ord_no = mso.sale_ord_no ) as need_ss
from test_ord mso
,(SELECT @rownum:=0) r
where mso.sale_ord_no > 0
and mso.trash_yn = 'N' and mso.sale_order_type='order'
";
if(!empty($search['startdate']) && !empty($search['enddate'])) {
$query .= " AND (concat(s_year, '-', LPAD(s_month, 2, 0), '-', LPAD(s_day, 2, 0)) BETWEEN '{$search['startdate']}' AND '{$search['enddate']}') ";
}
if (!empty($search['s_nmbr'])) {
$query .= " AND mso.s_nmbr like '".$search['s_nmbr']."%' ";
}
$query .= "
order by mso.s_ord_no asc
)ee
left outer join test_dd mc on mc.clt_id = ee.clt_id
order by num desc
limit ".$limit_ofset." , ".$pageList."
";
// $this->echo_r($query);
// exit();
$result['page_list'] = $this->db->query($query)->result_array();
$result['total_cnt'] = $this->db->query("SELECT FOUND_ROWS() AS total_cnt;")->row()->total_cnt;
return $result;
}
■ insert into values => select

■ 트리거
BEGIN
SET @whse_qty = IFNULL(NEW.qty,0) -0;
SET @whse_amt = IFNULL(NEW.amt,0) -0;
IF @whse_qty <> 0 THEN
INSERT INTO test_history SET
it_id=NEW.it_id
,warehouse_id=NEW.warehouse_id
,bf_whse_qty=0
,do_whse_qty= @whse_qty
,af_whse_qty= @whse_qty
,bf_whse_amt=0
,do_whse_amt= @whse_amt
,af_whse_amt= @whse_amt
,rgst_dt=NOW()
,emp_id =NEW.last_emp_id
,bigo=NEW.last_bigo
,ref_action =NEW.last_ref_action
,ref_table =NEW.last_ref_table
,ref_no =NEW.last_ref_no
,ref_chit_id =NEW.last_ref_chit_id
;
END IF ;
END
■ MySQL에 일시를 표시하는 함수 now(), current_timestamp()
now(3), now(6)은 밀리세컨즈 자릿수를 의미 (최대: 6)
SELECT now(), now(3), now(6), current_timestamp(); now() : 2021-08-11 23:57:04, now(3) : 2021-08-11 23:57:04.103,
now(6) : 2021-08-11 23:57:04.103821, current_timestamp() : 2021-08-11 23:57:04
■ 테이블, 데이터 복사
create table b1 select * from a1 where false; // 테이블 생성, 데이터 복사안함
create table b1 select * from a1 // 테이블 생성 , 데이터 복사
728x90