加密MySQL,这个查询做什么?

加密MySQL,这个查询做什么?,mysql,Mysql,所以我看了一些工作资料,看到了这个。谁能给我解释一下这是干什么的吗?我所知道的唯一一件事是,活动的_锦标赛是充满md5散列值的视图 select iT.TID from ( SELECT @s := @s + 1 id, TID FROM Active_Tournaments, (SELECT @s := 0) AS s ) as iT inner join ( SELECT CEIL(RAND() * (SELECT MAX(

所以我看了一些工作资料,看到了这个。谁能给我解释一下这是干什么的吗?我所知道的唯一一件事是,活动的_锦标赛是充满md5散列值的视图

select iT.TID
  from (
    SELECT @s := @s + 1 id, TID FROM Active_Tournaments, (SELECT @s := 0) AS s
    ) as iT
inner join
    (
        SELECT CEIL(RAND() *
            (SELECT MAX(id)
                    FROM (select *
                            from (SELECT @t := @t + 1 id
                                    FROM Active_Tournaments,
                                        (SELECT @t := 0) AS s) as iT) as ittt)) as id
    ) as ceil
    on iT.id = ceil.id;

提前感谢

它显示了一些来自活跃锦标赛的randon TID

SELECT @t := @t + 1 id
FROM Active_Tournaments,
   (SELECT @t := 0) AS s
这将为活动的_锦标赛中的每一行提供一个行号

然后得到最大行数MAX(id)并将其乘以一个随机数

使用CEIL,您将再次获得一个整数

在第一个选项中,选择

 (
 SELECT @s := @s + 1 id, TID FROM Active_Tournaments, (SELECT @s := 0) AS s
 ) as iT
再次将行号添加到活动的_锦标赛中,并仅选择在CEIL中具有相应编号的行(RAND()*MAX(id))

所以你得到了伪随机TID

我想补充一点

select DISTINCT iT.TID

即使有大量行,random也可能产生相同的行数。

如果没有ORDER BY子句,变量赋值是任意的,因此没有意义