Codeigniter 和 Firebird $this->db->join with Lower support
Codeigniter and Firebird $this->db->join with Lower support
这就是我使用 Codeigniter 从 Firebird 数据库获取记录的方法:
$columns = [
'job.JOBID AS Id', 'job.ORDERID AS orderID', 'suburb.LONGITUDE AS Longitude', 'suburb.LATITUDE AS Latitude', 'suburb.LCNAME', 'address.TOWN', ];
$this->db->select($columns);
$this->db->from('WORK as job');
$this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
$this->db->join('SALEORDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
$this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
$this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');
// THE BELOW LINE CAUSE ERROR DUE TO LOWER
$this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = LOWER(address.TOWN)', 'LEFT');
$query = $this->db->get();
代码在没有 LOWER
的情况下工作正常,并且相关的 JOIN
在没有它的情况下无法工作,因为条件为假。我已经说过,suburb.LCNAME = 'blacktown'
和 address.Town = BlackTown
。
我收到以下错误消息,
A PHP Error was encountered
Severity: Warning
Message: ibase_query(): Dynamic SQL Error SQL error code = -206 Column unknown ADDRESS.TOWN At line 12, column 1
Filename: ibase/ibase_driver.php
Line Number: 129
试试这个
$this->db->select($columns.',LOWER(address.Town) as lower_address');
$this->db->from('WORK as job');
$this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
$this->db->join('SALERDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
$this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
$this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');
// THE BELOW LINE CAUSE ERROR DUE TO LOWER
$this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = lower_address', 'LEFT');
$query = $this->db->get();
删除别名地址并使用以下行以及您的代码中的原始 table 名称。
$this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
改用:
$this->db->join('CUSTADDRESS', 'CUSTADDRESS.ADDRID = sorder.DELADDRID', 'INNER');
这就是我使用 Codeigniter 从 Firebird 数据库获取记录的方法:
$columns = [
'job.JOBID AS Id', 'job.ORDERID AS orderID', 'suburb.LONGITUDE AS Longitude', 'suburb.LATITUDE AS Latitude', 'suburb.LCNAME', 'address.TOWN', ];
$this->db->select($columns);
$this->db->from('WORK as job');
$this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
$this->db->join('SALEORDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
$this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
$this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');
// THE BELOW LINE CAUSE ERROR DUE TO LOWER
$this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = LOWER(address.TOWN)', 'LEFT');
$query = $this->db->get();
代码在没有 LOWER
的情况下工作正常,并且相关的 JOIN
在没有它的情况下无法工作,因为条件为假。我已经说过,suburb.LCNAME = 'blacktown'
和 address.Town = BlackTown
。
我收到以下错误消息,
A PHP Error was encountered
Severity: Warning
Message: ibase_query(): Dynamic SQL Error SQL error code = -206 Column unknown ADDRESS.TOWN At line 12, column 1
Filename: ibase/ibase_driver.php
Line Number: 129
试试这个
$this->db->select($columns.',LOWER(address.Town) as lower_address');
$this->db->from('WORK as job');
$this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
$this->db->join('SALERDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
$this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
$this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');
// THE BELOW LINE CAUSE ERROR DUE TO LOWER
$this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = lower_address', 'LEFT');
$query = $this->db->get();
删除别名地址并使用以下行以及您的代码中的原始 table 名称。 $this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');
改用: $this->db->join('CUSTADDRESS', 'CUSTADDRESS.ADDRID = sorder.DELADDRID', 'INNER');