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不是一回事。我想你需要会话变量来做这件事。我不明白为什么这个问题会被否决。