Mysql对数据进行交替排序

Mysql对数据进行交替排序,mysql,sql,Mysql,Sql,我有一个大表,其中的数据结构如下 My table car id_car | Site_car | descr_car ----------------------------------- 1 | onesite | onedesc 2 | twosite | twodesc 3 | twosite | onedesc 4 | onesite | onedesc 5 | twosite

我有一个大表,其中的数据结构如下

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次或更长时间显示一个site first、两个site second和三个site third

我想展示什么

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在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');
你可以试试这个

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

我不确定你能在SQL中做到这一点,除非有人比我更神秘。可能是您可以在应用程序层中执行的操作。SQL并不是真正的“随机”排序,您的第二个约束也不是真正可行的。但是结果3中有两个desc-但是没有提到随机显示descr_car列,所以这没有多大意义。treesite和threesite不是一回事。我想你需要会话变量来做这件事。我不明白为什么这个问题会被否决。