昨天我有一个问题,关于用rand()订购mysql查询。我得到了一个很好的答案:
https://stackoverflow.com/a/16597706/2333744
答案代码如下。
create temporary table results as
(Select *, @rn := @rn + 1 as rn, rand() as therand
from table1 inner join
table2
on table1.in = table2.in cross join
(select @rn := 0) const
where table1.T = A
);
select *
from results
where therand < 1000/@rn
order by therand
limit 500;
我什么都懂除了
cross join (select @rn : = 0) const
我不确定这是在做什么,它是否重要。当我移除它时,我没有性能变化。有人能理解这部分吗?
最佳答案
坦白地说,所有这些都是为了重置@rn变量。Is被“打包”到一个select中以避免运行2个查询。const表示它是常量,因此只计算一次。
当您删除它并将进一步的查询添加到单个事务中时,可能会遇到问题。
致意
Z螺栓
关于mysql - 无法理解mysql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16614375/