PHP MySQL, сортировка результатов по 3 столбцам

Я пытаюсь сортировать продукты на основе OfferType Sequence а также OutofStock

Стол выглядит как

id    name        offertype    sequence    outofstock
1     Alpha          1             3            0
2     Beta           2             1            0
3     Charlie        3             2            0
4     Delta          4             4            0
5     Random-1       0             5            0
6     Random-2       0             6            0
7     Random-3       0             7            0
8     Random-4       0             8            0
9     Random-5       0             9            0
10    Random-6       0             10           1

Целью является

  1. Все продукты, имеющие offertype (Альфа, Браво, Чарли, Дельта) идет сверху и отображается в соответствии с sequence (Бета, Чарли, Альфа, Дельта)
  2. Затем затем отобразите все случайные продукты, но каждый раз, когда страница обновляет эти Случайные продукты шарканье
  3. и если продукт outofstock должен оставаться на дне, как Последний продукт.

Замечания: sequence col можно удалить, если все продукты, имеющие offertype перетасовать, когда страница обновляется, но они должны оставаться поверх Случайные продукты.

Что я пробовал ORDER BY rand(), ORDER BY FIND_IN_SET() и PHP функция array_rand() но не в состоянии сортировать продукты в нужном порядке.

0

Решение

Это немного сложно, но не так сильно. Сначала вам нужно провести первичную сортировку, чтобы положить внизу товар на складе, а затем группу случайных товаров.
Но тогда вам понадобится небольшая хитрость, чтобы применить различные сортировки к группе случайных товаров и группе товаров, имеющих тип предложения.
Вы можете решить это несколькими способами, но я думаю, что случай является наиболее очевидным:

ORDER BY
-- Highest rule. Out of stock products always at the bottom.
outofstock,
-- Second important rule, offertype 0 (= random products) go at the bottom
offertype = 0,
-- Third rule is combined. Within the groups defined above, you need to sort by different fields.
-- If offer type = 0 (random), then sort by rand(), else sort by sequence.
case when offertype = 0 then
rand()
else
sequence
end

Если я реализую вашу заметку, то неслучайные продукты также могут иметь случайную случайную последовательность, в этом случае вы можете просто отсортировать по rand () в качестве третьего условия:

ORDER BY
-- Highest rule. Out of stock products always at the bottom.
outofstock,
-- Second important rule, offertype 0 (= random products) go at the bottom
offertype = 0,
-- Third rule: within the groups defined above, sort randomly
rand()
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]