Improved Room Booking selection SQL (outer join for unbooked, including computed sort order)

This commit is contained in:
Torsten 2022-05-04 10:21:38 +02:00
parent ce73dcf565
commit 7c09ad0a04
3 changed files with 32 additions and 46 deletions

View file

@ -119,7 +119,9 @@ class TourController extends Controller
$user=User::find($booking->user_id);
array_push($users, $user);
}
if($tour->start<Carbon::now()) {
// Alte Tour anzeigen
if($tour->start < Carbon::now()) {
$tour->start = Tour::toGermanDate($tour->start);
$tour->deadline = Tour::toGermanDate($tour->deadline);
return view('tour.show_old')
@ -128,19 +130,7 @@ class TourController extends Controller
->with('creator', $creator);
}
$sql="SELECT bookings.room_id as room_id,
booking_rooms.name as room_name,
bookings.user_id as user_id,
users.name as user_name
FROM
bookings, booking_rooms, users
WHERE bookings.user_id=users.id AND bookings.room_id=booking_rooms.id AND bookings.tour_id=".$tour->id
." ORDER BY booking_rooms.name;";
Log::info("Fetch sql: ".$sql);
$rooms=DB::select($sql);
Log::info("Rooms query result:");
Log::info($rooms);
$rooms=$this->fetch_rooms($tour->id);
$tour->start = Tour::toGermanDate($tour->start);
$tour->deadline = Tour::toGermanDate($tour->deadline);
@ -157,6 +147,31 @@ class TourController extends Controller
* @param \App\Tour $tour
* @return \Illuminate\Http\Response
*/
private function fetch_rooms($tour_id) {
$sql="SELECT qry.tour_id,
qry.room_id,
qry.user_id,
qry.user_name,
COALESCE(br.name,'Ungebucht') room_name,
COALESCE(br.name,'ZZZZZZZZZ') room_sort_order
FROM (
SELECT
bookings.tour_id,
bookings.room_id as room_id,
bookings.user_id as user_id,
users.name as user_name
FROM
bookings, users
WHERE bookings.user_id = users.id AND bookings.tour_id = ".$tour_id."
) qry LEFT JOIN booking_rooms as br
ON br.id = qry.room_id
ORDER BY 6,4;";
$rooms=DB::select($sql);
return($rooms);
}
public function edit(Tour $tour)
{
error_log("Tour:edit");
@ -167,18 +182,7 @@ class TourController extends Controller
$tour->start = Tour::toGermanDate($tour->start);
$tour->deadline = Tour::toGermanDate($tour->deadline);
$sql="SELECT bookings.room_id as room_id,
booking_rooms.name as room_name,
bookings.user_id as user_id,
users.name as user_name
FROM
bookings, booking_rooms, users
WHERE bookings.user_id=users.id AND bookings.room_id=booking_rooms.id AND bookings.tour_id=".$tour->id
." ORDER BY booking_rooms.name;";
Log::info("Fetch sql: ".$sql);
$rooms=DB::select($sql);
Log::info("Rooms query result:");
Log::info($rooms);
$rooms = $this->fetch_rooms($tour->id);
return view('tour.edit')
->with('tour', $tour)