Упорядочить по списку значений - PullRequest
0 голосов
/ 18 июня 2020

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

После поиска я нашел этот пример :

select WorkerName, WorkerJob
from Worker
order by decode(WorkerJob,
            'Fisherman',1,
            'Doctor',2,
            'Policeman',3,
            'Nurse', 4) asc;

Но в этом примере они установили жестко запрограммированные значения по порядку декодирования, но я хочу сделать это динамически, используя список идентификаторов компаний, которые я сохранил в таблице preference. Как я могу добиться упорядочивания декодирования динамических c?

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Присоединяйтесь к столам. (Выполните LEFT JOIN на случай, если у рабочего есть неизвестная / не указанная в списке работа.)

select w.WorkerName, w.WorkerJob
from Worker w
left join preferences p on w.WorkerJob = p.WorkerJob
order by p.sort_order
0 голосов
/ 18 июня 2020

Вы можете использовать таблицу preference во внешнем соединении и использовать sort_order следующим образом:

select w.WorkerName, w.WorkerJob
from Worker w left join preference p
on w.WorkerJob = p.WorkerJob
order by p.sort_order
0 голосов
/ 18 июня 2020

Используйте таблицу PREFERENCE в ORDER BY как:

SQL>   SELECT *
  2      FROM preference
  3  ORDER BY sort_id;

   SORT_ID JOB
---------- ---------
         1 PRESIDENT
         2 MANAGER
         3 ANALYST
         4 SALESMAN
         5 CLERK

SQL>   SELECT e.ename, e.job
  2      FROM emp e
  3  ORDER BY (SELECT p.sort_id
  4              FROM preference p
  5             WHERE p.job = e.job);

ENAME      JOB
---------- ---------
KING       PRESIDENT
CLARK      MANAGER
BLAKE      MANAGER
JONES      MANAGER
FORD       ANALYST
SCOTT      ANALYST
WARD       SALESMAN
MARTIN     SALESMAN
ALLEN      SALESMAN
TURNER     SALESMAN
JAMES      CLERK
ADAMS      CLERK
MILLER     CLERK
SMITH      CLERK

14 rows selected.

SQL>
...