SQL Несколько наборов результатов - PullRequest
0 голосов
/ 26 февраля 2020

enter image description here Я объединяю 4 таблицы для извлечения, но я хочу получить набор результатов как 2 массива, я пробовал и его повторное получение как один набор результатов.

Ниже приведен запрос

 select * from `services` inner join `location_services` on `location_services`.`serviceID` = `services`.`serviceID` inner join `locations` on `locations`.`locationID` = `location_services`.`locationID` inner join `clinics` on `clinics`.`clinicID` = `locations`.`clinicID` where `locations`.`clinicID` = 7

Как показано на рисунке, я хочу получить

location id with 38 as one result set and `39` as another.

Follwing - мой запрос в контроллере

public function showClinic($id)
    {
        $clinic = Clinic::find($id);
        $locations = Location::where('clinicID', $id)->get();
        $locationservices = Service::select('services.serviceName as servicename','locations.locationID as locid')
            ->join('location_services', 'location_services.serviceID', '=', 'services.serviceID')
            ->join('locations', 'locations.locationID', '=', 'location_services.locationID')
            ->join('clinics', 'clinics.clinicID', '=', 'locations.clinicID')
            ->where('clinics.clinicID','=',$id)
            ->get();

        // $newlocations = Service::select('services.serviceName as servicename','locations.locationID as locid')
        //     ->join('location_services', 'location_services.serviceID', '=', 'services.serviceID')
        //     ->join('locations', 'locations.locationID', '=', 'location_services.locationID')
        //     ->join('clinics', 'clinics.clinicID', '=', 'locations.clinicID')
        //     ->where('clinics.clinicID','=',$id)
        //     ->get();
        return view('clinic.show')->with(['locations' =>  $locations  ,'clinic'=>$clinic , 'services'=> $locationservices]);

    }

Здесь есть несколько клин

1 Ответ

0 голосов
/ 26 февраля 2020

Добавьте ->groupBy('location_services.locationID') к вашему запросу, чтобы вы могли сгруппировать один и тот же locationID в одну запись:

public function showClinic($id)
    {
        $clinic = Clinic::find($id);
        $locations = Location::where('clinicID', $id)->get();
        $locationservices = Service::select('services.serviceName as servicename','locations.locationID as locid')
            ->join('location_services', 'location_services.serviceID', '=', 'services.serviceID')
            ->join('locations', 'locations.locationID', '=', 'location_services.locationID')
            ->join('clinics', 'clinics.clinicID', '=', 'locations.clinicID')
            ->where('clinics.clinicID','=',$id)
            ->groupBy('location_services.locationID')
            ->get();


        return view('clinic.show')->with(['locations' =>  $locations  ,'clinic'=>$clinic , 'services'=> $locationservices]);

    }

И если ваша mysql версия v5.7 + , у вас будет ONLY_FULL_GROUP_BY проблема,

добавьте modes к mysql массиву в вашей конфигурации / базе данных. php:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            ...
            'strict' => true,
            'modes'  => [
                //'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ]
        ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...