Version 10 (modified by 3 weeks ago) ( diff ) | ,
---|
Пребарување на дестинации
Актери
Регистриран корисник
Реализација
- Внесување на критериуми за пребарување. Корисникот пристапува до функцијата за пребарување на дестинации, ги внесува своите преференции:
- Тип на место (на пример, море, планина)
- Посакувана сезона (пролет, лето, есен, зима)
- Приоритет (популарност од 1 до 10)
- Системот потоа:
- Ја користи табелата destination како главен извор на податоци.
- Преку LEFT JOIN се приклучуваат destination_tag и tag за филтрирање и прикажување на категории/ознаки.
- Преку LEFT JOIN кон review и destination_user се добиваат информации за просечен рејтинг и коментари.
- Условите се применуваат само ако корисникот внел вредности (инаку се игнорираат).
- ILIKE за case-insensitive пребарување.
- Популарноста се проверува врз основа на полето popularity од табелата destination.
Резултатот е листа на дестинации со основни информации, просечен рејтинг и поврзани ознаки.
SELECT d.id_destination, d.location_name, d.location_desc, d.types_of_places, d.recommended_season, d.country, d.popularity, ARRAY_AGG(DISTINCT t.tag_name) AS tags, COALESCE(ROUND(AVG(r.quality), 2), 0) AS avg_review FROM travel_sage.destination d LEFT JOIN travel_sage.destination_tag dt ON d.id_destination = dt.id_destination LEFT JOIN travel_sage.tag t ON dt.id_tag = t.id_tag LEFT JOIN travel_sage.review r ON d.id_destination = r.id_destination WHERE (:tip IS NULL OR d.types_of_places ILIKE CONCAT('%', :tip, '%')) AND (:sezona IS NULL OR d.recommended_season ILIKE CONCAT('%', :sezona, '%')) AND ( :prioritet_min IS NULL OR :prioritet_max IS NULL OR d.popularity BETWEEN :prioritet_min AND :prioritet_max ) GROUP BY d.id_destination, d.location_name, d.location_desc, d.types_of_places, d.recommended_season, d.country, d.popularity;
Note:
See TracWiki
for help on using the wiki.