非常に単純なselect文で非常に奇妙な問題が発生しています。ここにあります:CodeIgniter Oracle select-random issue
私はcsvファイル(Excelファイルのエクスポートです)を読んでいます。フィールドセパレータは ";"です。各フィールドは「」で囲まれています。
私は2番目、3番目、5番目のフィールドを使用して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を持っていない、ということですが、私は、Oracle SQL Developerで同じクエリをテストする場合には取得してID。
最初にタイムアウトだと思っていましたが、破棄されました。また、彼らは正しいとは思っていないので、質問を再構成しましたが、ノップです。関数NO_ACCENTS()は、すべてのアクセント文字を対応する文字で置き換え、すべてを大文字で書き出します。私もこのNO_ACCENTS()関数を使用せずに試して、同じ奇妙な結果を得ました。
アイデア?これは誰にも起こりますか?
ありがとうございます!
V
///////////////////////////////////////// //////////////////////////////////
ここでは、コードです:
コントローラ/
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;
}
importador.php
もう少しお手伝いしますか?
「無作為に」と言うときは、_same_パラメータを意味するのはデータを取得することがあり、時にはデータが得られない場合があります。このSQLを呼び出すCodeigniterのPHPコードはどのように見えますか? – Wolf
たとえば、このケースの1は20のうちの1つです。データを取得する予定ですが、データは取得しません。しかし、他のケースでは、同じクエリが完全にうまく機能します。 – Veronica
残りのコードで質問を編集しています。 – Veronica