2011-09-08 46 views
0

我有一個非常奇怪的問題,一個非常簡單的選擇語句。這裏是:CodeIgniter Oracle選擇 - 隨機問題

我正在讀取一個csv文件(即導出一個Excel文件)。字段分隔符是「;」每個字段都用「」括起來。

我使用第二,第三和第五個字段來創建一個SELECT來查找數據庫中的信息。換句話說,我正在根據他們的姓氏和名字以及電子郵件在一張桌子上找人。例如:

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]%'))); 

的問題是,隨機,笨不會帶來任何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; 
} 

它有助於多一點嗎?

+0

當你說「隨機」你的意思是_same_參數你有時會得到數據,有時你沒有數據?你調用這個SQL的Codeigniter PHP代碼是什麼樣的? – Wolf

+0

例如,這個例子中的1個是20個。它應該檢索數據,但它沒有。但對於其他情況,相同的查詢完美地工作。 – Veronica

+0

我正在編輯其餘代碼的問題。 – Veronica

回答

0

你可以使用「裁剪」功能,有時你可以有你的測試性條件之間的白色空間,嘗試財產以後這樣的:

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%'))) 

注意,我在加裝飾(no_accents('%Lastname%'))