簡體   English   中英

MySQL連接中的多行

[英]Multiple rows in a MySQL join

我有這個查詢/ 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),但是此查詢只檢索一個。 如何在不弄亂其余查詢的情況下檢索屬於某個用戶的所有推送標識符?

您可以使用GROUP_CONCAT將所有ID放入以逗號分隔的字符串中。 (請注意:我使用s將別名更改為push_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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM