| Version 10 (modified by , 5 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.
