2011-09-08 3 views
0

매우 간단한 select 문으로 매우 이상한 문제가 있습니다. 여기에 :CodeIgniter 오라클 선택 무작위 문제

Excel 파일을 내보내는 csv 파일을 읽었습니다. 필드 구분 기호는 ";"입니다. 각 입력란은 ''로 묶습니다.

두 번째, 세 번째 및 다섯 번째 필드를 사용하여 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 protected]%'))); 

문제는 무작위, CodeIgniter의 어떤 N_ID_PERSONA를 가져 오지 않는 것입니다하지만 오라클 SQL Developer에서 동일한 쿼리를 테스트하는 경우 검색하고 ID.

처음에는 시간 초과라고 생각했지만 폐기되었습니다. 또한, 정확하지는 않지만 Nop이라고 생각하여 쿼리를 다시 형식화했습니다. 함수 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; 
} 

좀 더 도움이됩니까?

+0

"무작위로"라고 말하면 _same_ 매개 변수가 때때로 데이터를 얻고 가끔 데이터를 얻지 못한다는 의미입니까? 예를 들어, 다음과 같이 입력하십시오 (예 : p.d_apelidos). (no_accents ('% Lastname %') 이 SQL을 호출하는 Codeigniter PHP 코드는 어떻게 생겼습니까? – Wolf

+0

예를 들어이 사례 중 1 개는 20 개 중 하나입니다. 데이터를 검색 할 예정이지만 그렇지는 않습니다. 그러나 다른 경우에는 동일한 쿼리가 완벽하게 작동합니다. – Veronica

+0

나머지 코드로 질문을 편집하고 있습니다. – Veronica

답변

0
사용 기능, 때때로 당신은 다음과 같이 뭔가를해야만 시도하여 테스트 condictions 사이의 공백을 가질 수있다 "트림"수

: 난에 트림을 추가 한

SELECT를 ...

WHERE TRIM((NO_ACCENTS(p.d_apellidos)) LIKE TRIM(NO_ACCENTS('%Lastname%')) 
    AND TRIM(NO_ACCENTS(p.d_nombres)) LIKE TRIM(NO_ACCENTS('%Firstname%'))) 

노트