我尝试在我的codeigniter项目的Model部分中的2个表之间比较2 DATE数据类型。以下是模型部分中的代码:
function get_absenand_evaluation_submission_data_by_submission($id){
$data = array();
if ($this->evaluation_model->get_id_emp_by_subm_id($id))
{
$emp_data = $this->evaluation_model->get_id_emp_by_subm_id($id);
foreach ($emp_data as $row)
{
array_push($data, $row->emp_id);
}
}
$this->db->select('e.fname,e.lname,e.nik,e.id, jt.name AS jabatan, ar.nik, ar.nilai',
DATEPART (year, 'ar.tanggal') AS 'ar.tahun',
DATEPART(month, 'ar.tanggal') AS 'ar.bulan',
DATEPART(year, 'es.date_nilai') AS 'es.tahun',
DATEPART(month, 'es.date_nilai') AS 'es.bulan',);
$this->db->from('employment e');
$this->db->join('employment_job j', 'e.id = j.emp_id', 'INNER');
$this->db->join('job_title jt', 'j.job_title = jt.id', 'INNER');
$this->db->join('absen_rekap ar', 'ar.tanggal, ar.nik = e.nik', 'INNER');
$this->db->join('evaluation_submission es', 'es.date_nilai', 'INNER');
$this->db->where(('ar.tahun', 'es.tahun')&&('ar.bulan', 'es.bulan'));
$this->db->order_by('e.fname', 'asc');
if ($data){
$this->db->where_not_in('e.id',$data);
}
$query = $this->db->get();
if ($query->num_rows() > 0)
{
return $query->result();
}
else
{
return FALSE;
}
}
我试试,但是我收到了错误。 "解析错误:语法错误,意外' AS'第259行和第34行的C:\ xampp \ htdocs \ erp \ hrm \ models \ evaluation_model.php中的(T_AS);
我知道,我的查询中存在错误,但我不知道如何修复它。请帮忙。
谢谢! (:
好的,我已按照以下代码修复了我的查询:
$this->db->select("e.fname, e.lname, e.nik, e.id, j.emp_id, j.job_title, jt.id, jt.name AS jabatan, ar.nik,
DATEPART (year, ar.tanggal) AS 'ar.tahun',
DATEPART(month,ar.tanggal) AS 'ar.bulan',
DATEPART(year, es.date_nilai) AS 'es.tahun',
DATEPART(month, es.date_nilai) AS 'es.bulan'" );
$this->db->from('employment e');
$this->db->join('employment_job j', 'e.id = j.emp_id', 'INNER');
$this->db->join('job_title jt', 'j.job_title = jt.id', 'INNER');
$this->db->join('absen_rekap ar', 'ar.nik = e.nik', 'INNER');
$this->db->join('evaluation_submission es', 'es.bulan = ar.bulan', 'INNER');
$this->db->where('ar.tahun', 'es.tahun');
但仍然出现错误
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在
employment
附近使用#{1}}employment_job
附近e
id
附近使用正确的语法。j
=emp_id
。e
我'在第2行选择
fname
。e
,lname
。e
,nik
。e
,id
。{{1} },j
。emp_id
,j
。job_title
,jt
。id
,jt
。name
AS jabatan,ar
。nik
,DATEPART
(年,ar
。tanggal)
AS' ar.tahun',DATEPART(月,{ {1}}。ar
AS' ar.bulan',DATEPART(年,tanggal)
。es
AS' es.tahun',DATEPART (月,date_nilai)
。es
AS' es.bulan' FROM(date_nilai)
e)INNER JOINemployment
j ONemployment_job
。{ {1}} =e
。id
INNER JOINj
jt ONemp_id
。job_title
=j
。job_title
内部加入jt
已开启id
。absen_rekap
=ar
。nik
内部加入e
esnik
。evaluation_submission
=es
。bulan
WHEREar
。bulan
=' es.tahun' GROUP BYar
。tahun
ORDER BYar
。nik
asc
我不知道我的查询有什么问题:
=============================================== ======================================== [更新]
我更改了以下代码:
e
我已经尝试了 var_dump($ this-> db); ,但它看起来像这样:
fname
这是什么意思?
答案 0 :(得分:3)
您的代码中存在多个语法错误。也许这不是答案,但对于代码格式化,我需要使用答案框。
之后有一个未开启的
*/
$this->db->join('job_title jt', 'j.job_title = jt.id', 'INNER');
你在这里关闭字符串:
$this->db->select('e.fname,e.lname,e.nik,e.id, jt.name AS jabatan, ar.nik, ar.nilai',
因此也会出现语法错误。
你的sql中有错误,在第一次查询结束时有一个不必要的,
,引号也是错误的:
$this->db->select("e.fname,e.lname,e.nik,e.id, jt.name AS jabatan, ar.nik, ar.nilai,
DATEPART (year, 'ar.tanggal') AS 'ar.tahun',
DATEPART(month, 'ar.tanggal') AS 'ar.bulan',
DATEPART(year, 'es.date_nilai') AS 'es.tahun'");
你需要在这里包装你的条件:
$this->db->where("('ar.tahun', 'es.tahun') && ('ar.bulan', 'es.bulan')");
答案 1 :(得分:0)
试试这个:
$this->db->select("e.fname,e.lname,e.nik,e.id, jt.name AS jabatan, ar.nik, ar.nilai,
DATEPART (year, ar.tanggal) AS 'ar.tahun',
DATEPART(month,ar.tanggal) AS 'ar.bulan',
DATEPART(year, es.date_nilai) AS 'es.tahun',
DATEPART(month, es.date_nilai) AS 'es.bulan'" );
您错误地使用了引号。有关详细信息:What is the difference between single-quoted and double-quoted strings in PHP?