Я пытаюсь сортировать продукты на основе 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
Целью является
offertype
(Альфа, Браво, Чарли, Дельта) идет сверху и отображается в соответствии с sequence
(Бета, Чарли, Альфа, Дельта)outofstock
должен оставаться на дне, как Последний продукт.Замечания: sequence
col можно удалить, если все продукты, имеющие offertype
перетасовать, когда страница обновляется, но они должны оставаться поверх Случайные продукты.
Что я пробовал ORDER BY rand()
, ORDER BY FIND_IN_SET()
и PHP функция array_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 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()
Других решений пока нет …