Упорядочить по одному столбцу, но нажать до конца, если другой столбец пуст - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отсортировать некоторые результаты по рангу, но хочу подтолкнуть результаты без изображения до конца.

У меня есть таблица с instructor_profiles и еще одна users таблица. Я пытаюсь отсортировать профиль преподавателя по плотному рангу, но хотел бы показать в конце те, у кого нет картинок.

Мой ранг работает нормально, но я не могу понять, как это сделать.

Например:

SELECT ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')),
 "instructor_profiles".id, 
 "instructor_profiles".title, 
 "instructor_profiles".image, 
 users.avatar
 FROM "instructor_profiles" LEFT JOIN users ON users.id = instructor_profiles.user_id 
 WHERE ("instructor_profiles"."search_vector" @@ plainto_tsquery('english', 'skate')) 
 ORDER BY 
        ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')) desc
 LIMIT 50 OFFSET 0

Дойдем до такого результата: results

Затем я попытался изменить ORDER BY на

ORDER BY instructor_profiles.image NULLS LAST,
users.avatar NULLS LAST,
ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')) desc

Но тогда мой вид по рангу совершенно запутался: results 2

1 Ответ

1 голос
/ 12 апреля 2019

Используйте CASE в вашем заказе, что-то вроде:

 ORDER BY CASE 
            WHEN instructor_profiles.image IS NOT NULL 
              OR users.avatar IS NOT NULL 
            THEN 0 
            ELSE 1  
          END ASC,
          ts_rank_cd DESC

Это не порядок по image или avatar, просто по факту, является ли он NULL, и все, что не равно, обрабатываются одинаково, и тогда ваша функция ранжирования будет применяться.

...