У меня очень странная проблема с довольно простым оператором select. Вот оно:
Я читаю 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@host.com%')) );
Проблема в том, что в случайном порядке CodeIgniter не приносит никакого N_ID_PERSONA, но если я тестирую тот же запрос в Oracle SQL Developer, он получает и идентификатор.
Сначала я подумал, что это был тайм-аут, но от него отказались. Кроме того, переформулировали запросы, потому что я думал, что они не были правильными, но нет. Функция NO_ACCENTS () просто заменяет все акцентированные символы соответствующей буквой и записывает все в верхнем регистре. Я также попытался без использования этой функции NO_ACCENTS () и получил тот же странный результат.
Есть идеи? Это с кем-нибудь случается?
Большое спасибо!
V * * 1016
/////////////////////////////////////////////// ////////////////////////////
Вот это код:
Контроллеры / 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;
}
Помогает ли это немного больше?