CodeIgniter Oracle select - 随机问题

时间:2011-09-08 13:42:01

标签: oracle codeigniter

我有一个非常简单的选择语句非常奇怪的问题。这是:

我正在读一个csv文件(即导出Excel文件)。字段分隔符是“;”每个字段都用“”括起来。

我使用第二,第三和第五个字段创建SELECT以在DB中查找该信息。换句话说,我正在根据他们的姓氏和名字在桌子上找人,并发送电子邮件。例如:

SELECT MAX(n_id_persona) AS n_id_persona 
FROM (
    SELECT DISTINCT MAX(p.n_id_persona) AS n_id_persona
    FROM PERSONAS p
    WHERE (NO_ACCENTS(p.d_apellidos) LIKE NO_ACCENTS('%Lastname%') 
        AND NO_ACCENTS(p.d_nombres) LIKE NO_ACCENTS('%Firstname%'))
    UNION
    SELECT DISTINCT MAX(p.n_id_persona) AS n_id_persona
    FROM PERSONAS p
    LEFT JOIN CORREOS c ON (p.n_id_persona = c.n_id_persona)
    WHERE ((c.c_correo LIKE '%email@host.com%')) );

问题是,随机地,CodeIgniter不带任何N_ID_PERSONA但是如果我在Oracle SQL Developer中测试相同的查询它会检索和ID。

我首先认为这是暂停,但被丢弃了。此外,重新制定了查询,因为我认为它们不正确但不是。函数NO_ACCENTS()只是用相应的字母替换所有重音字符,并以大写形式写入所有内容。我也试过没有使用这个NO_ACCENTS()函数,并得到了同样奇怪的结果。

有什么想法吗?这会发生在任何人身上吗?

非常感谢!

V

/////////////////////////////////////////////// ////////////////////////////

这是代码:

控制器/ importador.php

public function __construct()
{
    parent::__construct();
    $this->output->enable_profiler(TRUE);
    session_start();
}

public function index()
{
    //Connection info to the DB

    $_SESSION['c'] = $connection_info;

    $this->db = $this->load->database($_SESSION['c'], TRUE, TRUE);
    $this->load->model('Importador_model');

    //Reads the csv
    $this->load->library('csvreader');

    $filePath = '/home/vcl/Desktop/CRM/File_name.csv';

    $data['csvData'] = $this->csvreader->parse_file($filePath);

    foreach($data['csvData'] as $linea){

        $data['coincidencia'] = $this->Importador_model->Buscar_contacto(str_replace('\'', '\'\'', $linea['Apellido']), str_replace('\'', '\'\'', $linea['Nombre']), $linea['Email']);  

        echo $linea['Apellido'].' '.$linea['Nombre'].''.$linea['Entrevista'].'<br>';
        $temp = $data['coincidencia']->row();
        echo $temp->N_ID_PERSONA;
        echo '<br>';
    }
}

模型/ importador_model.php

function Buscar_contacto($ape = NULL, $nom = NULL, $email = NULL) 
{
$CI =& get_instance();

$query = $CI->db->query('SELECT MAX(n_id_persona) AS n_id_persona 
             FROM (
                SELECT DISTINCT MAX(p.n_id_persona) AS n_id_persona
                FROM PERSONAS p
                WHERE (NO_ACCENTS(p.d_apellidos) LIKE NO_ACCENTS(\'%'.$ape.'%\') 
                    AND NO_ACCENTS(p.d_nombres) LIKE NO_ACCENTS(\'%'.$nom.'%\'))
                UNION
                SELECT DISTINCT MAX(p.n_id_persona) AS n_id_persona
                FROM PERSONAS p
                LEFT JOIN CORREOS c ON (p.n_id_persona = c.n_id_persona)
                WHERE ((c.c_correo LIKE \'%'.$email.'%\')) )');

return $query;
}

它会有所帮助吗?

1 个答案:

答案 0 :(得分:0)

你可以使用“修剪”功能,有时你可以在你的测试条件之间有空格,试试这样的事情:

SELECT ...

  Twilio.Device.disconnect(function (conn) {
    $("#log").text("Call ended");
  });

  function hangup() {
    Twilio.Device.disconnectAll();
  }

请注意,我已在表格字段中添加了修剪(p.d_apelidos)并在(no_accents('%Lastname%'))

中添加了相同的修剪