2

postgis dbにクエリを実行するために、検索クライアントを作成しています。

検索クエリは、

    SELECT tags->'name' AS name,ST_Transform(way,4326) AS pt_lonlattext 
FROM planet_osm_point WHERE lower(tags->'name') LIKE '%school%'

今、私はそのような方法で結果を必要としています、

部分的に一致した結果よりも完全に一致した結果を優先する必要があります。例: 名前に「学校」のみが含まれる結果は、返されるリストの最初に表示され、その後に「小学校」、「高校」などを含む結果が続きます。

上記のクエリを再構築して目的の結果を得る方法はありますか?

4

1 に答える 1

2

このようなもの?

select
    tags->'name' as name,
    ST_Transform(way,4326) as pt_lonlattext 
from planet_osm_point
where lower(tags->'name') LIKE '%school%'
order by case when lower(tags->'name') = 'school' then 0 else 1 end

または、より多くの DRY バージョン:

with cte as (
    select
        tags->'name' as name,
        ST_Transform(way,4326) as pt_lonlattext 
    from planet_osm_point
)
select name, pt_lonlattext 
from cte
where lower(name) like '%school%'
order by case when lower(name) = 'school' then 0 else 1 end
于 2013-09-02T14:43:37.190 に答える