Mysql сортировать данные в качестве альтернативы - PullRequest
0 голосов
/ 13 июня 2018

У меня есть большая таблица, в которой данные структурированы следующим образом

My table car
id_car | Site_car     | descr_car
-----------------------------------
1      | onesite      | onedesc
2      | twosite      | twodesc
3      | twosite      | onedesc
4      | onesite      | onedesc
5      | twosite      | twodesc
6      | onesite      | onedesc
7      | treesite     | onedesc
8      | treesite     | onedesc

Я хочу иметь возможность отображать столбец site_car в произвольном порядке, но с первой, двумя, двумя и тремя третями каждые 15 или более раз

что я хочу отобразить

id_car | Site_car     | descr_car
-----------------------------------
4      | onesite      | onedesc
3      | twosite      | twodesc
7      | treesite     | onedesc
1      | onesite      | onedesc
2      | twosite      | twodesc
6      | treesite     | onedesc

У вас, ребята, есть идея?

Thx

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете попробовать это

SET @Fno:= 999
SET @Sno:= 9999
SET @Tno:= 99999
SELECT   id_car, Site_car , descr_car from 
(SELECT  
@row_number:=CASE
    WHEN Site_car = 'onesite' THEN @Fno + 1
    WHEN Site_car = 'twosite' THEN @Sno + 1 
    ELSE @Tno+1 
END AS num,* from car) order by num
0 голосов
/ 13 июня 2018

Это сложно в MySQL.Идея состоит в том, чтобы перечислить строки и затем упорядочить по этому перечислению:

select c.*
from (select c.*,
             (@rn := if(@sc = site_car, @rn + 1,
                        if(@sc := site_car, 1, 1)
                       )
             ) as rn
      from (select c.*
            from car c
            order by site_car, id_car
           ) c cross join
           (select @sc := -1, @rn := 0) params
     ) c
order by rn, field(site_car, 'onesite', 'twosite', 'threesite');

Кстати, в MySQL 8 + это намного проще:

select c.*
from car c
order by row_number() over (partition by site_car order by id_car),
         field(site_car, 'onesite', 'twosite', 'threesite');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...