2015-11-28 1 views
0

Я пытаюсь сортировать продукты на основе OfferTypeSequence и OutofStockPHP MySQL, Сортировать результат по 3 цв-х

таблица выглядит

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 (Alpha, Bravo, Charlie, Delta), отображаются сверху и отображаются в соответствии с sequence (Beta, Charlie, Alpha, Delta)
  2. Тогда следующий дисплей все Случайные продукты, но каждый раз, когда страница обновить эти Случайные товары перетасовать
  3. и если продукт outofstock должен находиться на дне, как последний продукт.

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

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

ответ

1

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

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 

Если я реализую свой Note, то неслучайные продукты могут иметь случайный перетасовать тоже, в этом случае вы можете просто сортировать по 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() 
+0

Самое первое предложение даже работал, если 'sequence' удалены из' ПОРЯДКА BY', 'offertype' остался на вершине, и оба продукта с' offertype' и случайное продукты перетасовываются на странице обновления (что точно является целью) и outofstock остался внизу, – Shehary

+0

Спасибо за помощь. – Shehary

Смежные вопросы