wiki:PrebaruvanjeDestinacii

Пребарување на дестинации

Актери

Регистриран корисник

Реализација

  1. Внесување на критериуми за пребарување. Корисникот пристапува до функцијата за пребарување на дестинации, ги внесува своите преференции:
    • Тип на место (на пример, море, планина)
    • Посакувана сезона (пролет, лето, есен, зима)
    • Приоритет (популарност од 1 до 10)
  2. Системот потоа:
  • Ја користи табелата 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;
Last modified 3 weeks ago Last modified on 09/24/25 00:19:59
Note: See TracWiki for help on using the wiki.