2016-07-22 2 views
0

내가이 쿼리/PHP 코드를 가지고 :여러 행이 가입

public function get_days_appointments($day) { 
    $day_start = date('Y-m-d 00:00:00', $day); 
    $day_end = date('Y-m-d 23:59:59', $day); 
     return $this->db->select('e.id, 
      e.start_datetime, 
      e.end_datetime, 
      e.hash, 
      e.id_google_calendar, 
      u1.first_name AS customer_first_name, 
      u1.last_name AS customer_last_name, 
      u1.email AS customer_email, 
      u1.phone_number AS customer_phone_number, 
      u2.first_name AS provider_first_name, 
      u2.last_name AS provider_last_name, 
      u2.email AS provider_email, 
      u2.phone_number AS provider_phone_number, 
      s.name, 
      s.duration, 
      s.price, 
      s.description, 
      t.push_identifier') 
     ->from('ea_appointments e') 
     ->join('ea_users u1', 'e.id_users_customer = u1.id','left') 
     ->join('ea_users u2', 'e.id_users_provider = u2.id','left') 
     ->join('ea_services s', 'e.id_services = s.id','left') 
     ->join('ea_push_ids t', 'e.id_users_customer = t.user_id','left') 
     //->join('ea_cellcarrier cc', 'u1.id_cellcarrier = cc.id','left') 
     ->where('e.start_datetime >',$day_start) 
     ->where('e.start_datetime <',$day_end) 
    ->get()->result(); 
} 

내 문제는 여러 push_identifiers (ea_push_ids)이 있다는 것입니다,하지만이 쿼리는 단 하나를 검색합니다. 어떻게 나머지 쿼리를 엉망으로 만들지 않고 특정 사용자의 모든 푸시 식별자를 검색 할 수 있습니까?

답변

1

GROUP_CONCAT을 사용하면 모든 ID를 쉼표로 구분 된 문자열에 넣을 수 있습니다. (주의 : 나는 spush_identifiers에 별칭을 변경)

public function get_days_appointments($day) { 
    $day_start = date('Y-m-d 00:00:00', $day); 
    $day_end = date('Y-m-d 23:59:59', $day); 
     return $this->db->select('e.id, 
      e.start_datetime, 
      e.end_datetime, 
      e.hash, 
      e.id_google_calendar, 
      u1.first_name AS customer_first_name, 
      u1.last_name AS customer_last_name, 
      u1.email AS customer_email, 
      u1.phone_number AS customer_phone_number, 
      u2.first_name AS provider_first_name, 
      u2.last_name AS provider_last_name, 
      u2.email AS provider_email, 
      u2.phone_number AS provider_phone_number, 
      s.name, 
      s.duration, 
      s.price, 
      s.description, 
      t.push_identifiers') 
     ->from('ea_appointments e') 
     ->join('ea_users u1', 'e.id_users_customer = u1.id','left') 
     ->join('ea_users u2', 'e.id_users_provider = u2.id','left') 
     ->join('ea_services s', 'e.id_services = s.id','left') 
     ->join('(SELECT GROUP_CONCAT(push_identifier) AS push_identifiers, user_id 
     FROM ea_push_ids 
     GROUP BY user_id) t', 'e.id_users_customer = t.user_id','left') 
     ->where('e.start_datetime >',$day_start) 
     ->where('e.start_datetime <',$day_end) 
    ->get()->result(); 
} 

또는이

public function get_days_appointments($day) { 
    $day_start = date('Y-m-d 00:00:00', $day); 
    $day_end = date('Y-m-d 23:59:59', $day); 
     return $this->db->select('e.id, 
      e.start_datetime, 
      e.end_datetime, 
      e.hash, 
      e.id_google_calendar, 
      u1.first_name AS customer_first_name, 
      u1.last_name AS customer_last_name, 
      u1.email AS customer_email, 
      u1.phone_number AS customer_phone_number, 
      u2.first_name AS provider_first_name, 
      u2.last_name AS provider_last_name, 
      u2.email AS provider_email, 
      u2.phone_number AS provider_phone_number, 
      s.name, 
      s.duration, 
      s.price, 
      s.description, 
      (SELECT GROUP_CONCAT(t.push_identifier) 
     FROM ea_push_ids t 
     WHERE t.user_id = e.id_users_customer) AS push_identifiers') 
     ->from('ea_appointments e') 
     ->join('ea_users u1', 'e.id_users_customer = u1.id','left') 
     ->join('ea_users u2', 'e.id_users_provider = u2.id','left') 
     ->join('ea_services s', 'e.id_services = s.id','left') 
     ->where('e.start_datetime >',$day_start) 
     ->where('e.start_datetime <',$day_end) 
    ->get()->result(); 
} 
를 같이