2015-07-17 3 views
1

В CodeIgniter Я пытаюсь произвести следующий SQL заявление:активный recored где оператор

SELECT * 
FROM (`ea_users`,`ea_appointments`,`ea_services`) 
WHERE `ea_appointments`.`id_users_customer` = `ea_users`.`id` 
AND `ea_appointments`.`id_services` = `ea_services`.`id` 
AND `ea_appointments`.`start_datetime`> '2015-07-18 00:00:00' 
AND `ea_appointments`.`start_datetime`< '2015-07-18 23:59:59' 

В формате Active Record Я попытался это:

$day_start = date('Y-m-d 00:00:00', $day); 
$day_end = date('Y-m-d 23:59:59', $day); 
return $this->db->select('*') 
    ->from('ea_appointments,ea_services,ea_users') 
    ->where('ea_appointments.id_users_customer','ea_users.id') 
    ->where('ea_appointments.id_services','ea_services.id') 
    ->where('ea_appointments.start_datetime>',$day_start) 
    ->where('ea_appointments.start_datetime<',$day_end) 
    ->get()->result(); 

Но она производит вместо этого:

SELECT * 
FROM (`ea_appointments`, `ea_services`, `ea_users`) 
WHERE `ea_appointments`.`id_users_customer` = 'ea_users.id' 
AND `ea_appointments`.`id_services` = 'ea_services.id' 
AND `ea_appointments`.`start_datetime>` '2015-07-18 00:00:00' 
AND `ea_appointments`.`start_datetime<` '2015-07-18 23:59:59' 

Как получить «ea_users.id» и «ea_services.id» быть переведено как «ea_users». «ид» и «ea_servi цы. 'ID'? Я пробовал:

->where('ea_appointments.id_users_customer','ea_users'.'id') 
    ->where('ea_appointments.id_services','ea_services'.'id') 

Но что производит это:

WHERE `ea_appointments`.`id_users_customer` = 'ea_usersid' 
AND `ea_appointments`.`id_services` = 'ea_servicesid' 

Что такое правильный формат?

+0

Почему имеет значение, если ваш SQL-вывод выглядит следующим образом: '' ea_users '.' Id '', а не как это: '' ea_users.id''? MYSQL должен быть способен дифференцировать. – CodeGodie

+0

Непонятно, что вы просите. Но помните, если вы используете какой-либо оператор, где функция должна использовать пробел. –

ответ

0

Это должно работать: (Пространство перед> < знаков)

$day_start = date('Y-m-d 00:00:00', $day); 
$day_end = date('Y-m-d 23:59:59', $day); 
return $this->db->select('*') 
->from('ea_appointments,ea_services,ea_users') 
->where('ea_appointments.id_users_customer','ea_users.id') 
->where('ea_appointments.id_services','ea_services.id') 
->where('ea_appointments.start_datetime >',$day_start) 
->where('ea_appointments.start_datetime <',$day_end) 
->get()->result(); 
+0

Эти небольшие пространства. Благодарю. –

+0

Ну, я думал, это сработало, но это не так. 'ea_users'''' и' ea_services'.'id' - это то, что необходимо (левые апострофы). Это важно. Я пробовал его с отсутствием и в других конфигурациях, и он генерирует нуль как в воспламенителе кода, так и непосредственно в phpMyAdmin. Только с левыми склоняющимися апострофами я получаю то, что нужно. Codeigniter помещает их в первую переменную, но не другую. Итак, какие-то мысли? –

+0

Левые наклонные апострофы ничего не делают в этом SQL. Любые ошибки в phpmyadmin? –

0

Предполагая оригинальную функцию SQL работает, как вы хотели его, прежде чем вы пытались воссоздать его в CodeIgniter, вы можете просто сделать это.

$day_start = date('Y-m-d 00:00:00', $day); 
$day_end = date('Y-m-d 23:59:59', $day); 

$query = $this->db->query(SELECT * 
FROM (ea_users, ea_appointments, ea_services) 
WHERE ea_appointments.id_users_customer = ea_users.id 
AND ea_appointments.id_services = ea_services.id 
AND ea_appointments.start_datetime > {$day_start} 
AND ea_appointments.start_datetime < {$day_end}); 

$query->result(); 
+0

Да, это действительно работает, но я старался оставаться в пределах активной формы записи codeigniters. Я не эксперт, но я понимаю, что он предназначен для лучшей безопасности. Это похоже на хорошую вещь, особенно когда речь заходит о клиентской информации, поэтому я собираюсь с ней. –

0

Это сработало:

$day_start = date('Y-m-d 00:00:00', $day); 
$day_end = date('Y-m-d 23:59:59', $day); 
return $this->db->select('ea_appointments.id, 
ea_appointments.start_datetime, 
ea_appointments.end_datetime, 
ea_users.email, 
ea_services.name') 
    ->from('ea_appointments') 
    ->join('ea_users', 'ea_appointments.id_users_customer = ea_users.id','left') 
    ->join('ea_services', 'ea_appointments.id_services = ea_services.id','left') 
    ->where('ea_appointments.start_datetime >',$day_start) 
    ->where('ea_appointments.start_datetime <',$day_end) 
    ->get()->result(); 

Регистрация заявления сделал трюк.

 Смежные вопросы

  • Нет связанных вопросов^_^