У меня есть список предметов с подсписком предметов с подсписком предметов (всего 3 уровня).
Основной уровень сортируется с помощью jQueryUI (за рамками этого вопроса, поэтому эта функциональность не показана). Основной уровень не сортируется, но УРОВЕНЬ x.x можно перемещать вверх и вниз вдоль axis-y
, а затем можно выполнить отдельную сортировку на уровне x.x.x. axis-y
находится на месте, чтобы предотвратить возможность падения УРОВНЯ 1 на УРОВЕНЬ 2.1.3 (если это произойдет, мы будем как Чак Норрис и сможем делить на ноль, но я отвлекся).
Мой вопрос заключается в том, что является наилучшей практикой: иметь каждый уровень со своим собственным столбцом sort by
в базе данных или использовать один столбец для всего, что нужно отсортировать?
Мария 10.х в игре.
UPDATE
Для контекста это будет список мероприятий. Вы нажимаете на стрелку, и список откроет меню, поэтому первичным ключом будет идентификатор активности.
UPDATE
Я предоставляю запрос, с которым я работаю с самого начала. Я пока не получил указаний, но надеюсь, что этот запрос может помочь.
SELECT DISTINCT
a c.coreID,
c.coreLabel,
a.phaseOrderBy,
a.weekOrderby,
a.dayOrderBy,
c.groupID,
a.woAID,
a.phaseID,
(CASE
WHEN p.phaseID is null
THEN CONCAT('NONE')
ELSE p.phaseLabel
END) as phaseLabel,
a.weekID,
a.dayID,
(CASE
WHEN w.weekLabel is null
THEN CONCAT('NONE')
ELSE W.weekLabel
END) as weekLabel,
c.uc,
c.um
FROM
activity a
LEFT JOIN phase p ON p.phaseID = a.phaseID
LEFT JOIN core c ON c.coreID = a.coreID
LEFT JOIN week w ON w.weekid = a.weekID
WHERE
c.orgID = :orgID AND
c.userID = :userID
ORDER BY
c.coreLabel
, a.phaseOrderBy
-- , a.phaseID
, a.weekOrderBy
-- , a.weekID
, a.dayOrderBy
-- , a.dayID
У меня также есть другая скрипка, которая может помочь проиллюстрировать функциональность, которую я пытаюсь выполнить: jsFiddle с реализованной сортировкой
Вот dbFiddle
UPDATE
Вот пример того, как должны выглядеть данные при выполнении запроса. Это позволит мне правильно перебрать данные, чтобы получить нужный мне вывод. Я также включаю ссылку на Google Doc (только для чтения) здесь .
На рисунке ниже (1 розовый цвет) и (2 желтый цвет) - известные выборки данных, а столбцы (3), (4) и (5) - требуемый порядок по порядку.
![screen shot of sample data set](https://i.stack.imgur.com/8FCJB.png)
ДРУГОЕ ОБНОВЛЕНИЕ
Создание этого скриншота было отличным упражнением и действительно заставило меня задуматься о данных (спасибо, Рик!).
Данные в woaid - это просто PK, и я должен был их рандомизировать - я просто не думал об этом, поэтому я извиняюсь за путаницу, которую это могло вызвать.
Сценарий: допустим, пользователь перетаскивает элемент дня, соответствующий woaid = 19, из coreid = 444 в coreid = 232 / phaseID = 19 / weekID = 1 и хочет, чтобы этот элемент был последним, отображаемым под неделей нового местоположения (это был единственный элемент в его старом месте, так что обычно это просто «1»). Его идентификатор dayOrderBy будет изменен с 1 на 4 (это coreID, phaseID, weekID также будет соответственно обновлен). При следующем посещении страницы должен отображаться правильный порядок сортировки И местоположение, означающее, что день, соответствующий woaid = 19, теперь должен отображаться как 4-й элемент в coreid = 232 / phaseID = 19 / weekID = 1 / dayID = 7 (dayID не делает ' изменить, только orderByDayID изменится).