| | 52 | 2. Просторно филтрирање на барања (Spatial Join) |
| | 53 | За ефикасно поврзување на патниците со релевантните такси компании, креиран е нов поглед кој користи просторно спојување (Spatial Join). Преку функцијата ST_Contains, погледот проверува дали почетната локација на патникот (start_location) се наоѓа во рамките на полигонот на покриеност на компанијата (coverage_polygon). Овој пристап е многу поефикасен од пресметување на растојанија. Ова е оптимизацијата која ги подобрува перформансите на погледот vw_unassigned_requests спомнат во делот за QueryOptimization каде почетно беше решено со пагинација на барањата, а бо случајот се земаат помал број на барања поради тоа што ќе се земат само барања кои се наоѓаат во одреден радиус. |
| | 54 | |
| | 55 | {{{ |
| | 56 | create or replace view vw_company_available_requests as |
| | 57 | select distinct |
| | 58 | r.id as request_id, |
| | 59 | r.customer_user_id, |
| | 60 | cus.username as customer_username, |
| | 61 | r.timestamp, |
| | 62 | r.number_of_adult_passengers, |
| | 63 | r.number_of_children, |
| | 64 | r.status, |
| | 65 | r.female_driver, |
| | 66 | r.luggage, |
| | 67 | r.luggage_count, |
| | 68 | r.baby_seat_count, |
| | 69 | ca.company_id |
| | 70 | from request r |
| | 71 | join AppUser cus on r.customer_user_id = cus.id |
| | 72 | join area a on ST_Contains(a.coverage_polygon, r.start_location) |
| | 73 | join company_area ca on a.id = ca.area_id |
| | 74 | where r.status = 'pending'; |