Вы думаете, что ваша реляционная база данных неверна. Вам понадобятся реально 3 таблицы.
employee
+-------------------+------------+
| employee_id | name |
+-------------------+------------+
| 1 | John |
| 2 | Jane |
+-------------------+------------+
designation
+----------------------+-------------------------+----------------+
| designation_id | designation_name | priority |
+----------------------+-------------------------+----------------+
| 1 | president | 1 |
| 2 | school director | 1 |
| 3 | ict director | 2 |
+----------------------+-------------------------+----------------+
designation_to_employee
+---------+---------------------+-------------------+
| id | designation_id | employee_id |
+---------+---------------------+-------------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
+---------+---------------------+-------------------+
С этими тремя таблицами нет необходимости для разграничения внутри таблицы. Вы можете иметь несколько назначений на одного сотрудника - И вы затем можно сортировать по указанным обозначениям.
IE
SELECT a.name, c.designation_name from employee a
LEFT JOIN designation_to_employee b
ON a.employee_id = b.employee_id
LEFT JOIN designation c
ON b.designation_id = c.designation_id
ORDER BY c.priority ASC
Конечно, если вы не хотите, чтобы Джон получал результаты дважды, потому что он президент И директор школы, вы можете GROUP BY a.employee_id
или что-то в этом роде ... Этого должно быть достаточно, чтобы вы хорошо себя чувствовали. Если вы хотите все обозначений Джона, но в одном ряду, вам придется использовать NESTED SELECT
в сочетании с CONCAT
, который выходит за рамки этого ОП и должен быть новый вопрос о SO, если это то, что вы пытаетесь. Сначала настройте свою БД правильно и попробуйте.