Упорядочить результаты по столбцу динамически в зависимости от того, где найдено совпадение - PullRequest
5 голосов
/ 16 августа 2010

Я выбираю данные из таблицы, в которой один из 3 столбцов соответствует заданной строке поиска:

SELECT * 
FROM CARS
WHERE MODEL LIKE searchString
OR MANUFACTURER LIKE searchString
OR DESCRIPTION LIKE searchString

Но мне нужно упорядочить результаты в зависимости от того, где было найдено совпадение, на основе столбцавзвешивание.Т.е. если совпадение было найдено в столбце MODEL, то строка должна отображаться выше в результатах, чем если бы совпадение было найдено в столбце MANUFACTURER.При весе 1-МОДЕЛИ 2-ИЗГОТОВИТЕЛЬ 3-ОПИСАНИЕ.

Вся помощь очень ценится, спасибо!

1 Ответ

4 голосов
/ 16 августа 2010

Функциональность Oracle для полнотекстового поиска (FTS) - Oracle Text - была бы быстрее и обеспечивала бы оценку ранга на основе его алгоритма ...

SELECT c.*,
            CASE 
                WHEN c.model LIKE searchstring THEN 1
                WHEN c.manufacturer LIKE searchstring THEN 2
                WHEN c.description LIKE searchstring THEN 3
            END AS match_rank
    FROM CARS c
  WHERE c.model LIKE searchstring
        OR c.manufacturer LIKE searchstring
        OR c.description LIKE searchstring
ORDER BY match_rank 

Но вы не упоминаете, как обрабатывать ранжирование, если совпадают еще два столбца ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...