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)

View file

@ -25,25 +25,7 @@ class CreateBookingRooms extends Migration
$table->integer('room_id')->after('user_id');
});
// 1.) Dummy Räume für jede Tour erstellen
$result=DB::select("SELECT DISTINCT tour_id FROM bookings;");
foreach ($result as $row) {
$sql="INSERT INTO booking_rooms(name,tour_id,capacity,created_at,updated_at) VALUES ('Dummy-Raum',".$row->tour_id.",100,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP);";
DB::insert($sql);
}
// 2.) room_id in bookings für jeden Teilnehmer nachtragen
$tours=DB::select("SELECT id from tours;");
foreach($tours as $tour) {
$tour_users=DB::select("SELECT user_id FROM bookings WHERE tour_id=".$tour->id.";");
$room=DB::select("SELECT id FROM booking_rooms WHERE tour_id=".$tour->id.";");
foreach($tour_users as $tour_user) {
$sql="UPDATE bookings SET room_id=".$room[0]->id." WHERE tour_id=".$tour->id." and user_id=".$tour_user->user_id.";";
print($sql."\n");
DB::update($sql);
}
}
}

View file

@ -1,5 +1,5 @@
# MotorradIG Website
## Run
cd motorradig
cd motorradig;
docker-compose up -d --build