首页 > 解决方案 > 加密 MySQL,这个查询是做什么的?

问题描述

所以我正在处理一些工作内容并看到了这一点。有人可以解释一下这是做什么的吗?我唯一知道的是 Active_Tournaments 是充满 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;

提前致谢

标签: mysql

解决方案


它显示了一些来自 Active_Tournaments 的随机 TID

SELECT @t := @t + 1 id
FROM Active_Tournaments,
   (SELECT @t := 0) AS s

这为 Active_Tournaments 中的每一行提供了一个行号

然后你得到最高的行号 MAX(id) 并将它乘以一个随机数。

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

在第一个 SELECT

 (
 SELECT @s := @s + 1 id, TID FROM Active_Tournaments, (SELECT @s := 0) AS s
 ) as iT

您再次将行号添加到 Active_Tournaments 并仅选择在 CEIL(RAND() * MAX(id)) 中具有相应编号的行。

所以你得到伪随机 TID

我会补充

select DISTINCT iT.TID

即使有大量的行,随机也可以产生相同的数字。


推荐阅读