我有 3张表,彼此并不相同。根据我的要求之一,我必须将所有这些表记录复制到另一个表中。 那部分没关系。我的问题是我现在插入的记录是订单。 像
first 100 records from table1
second 100 records from table2
third 100 records from table3
我想要做的是change/mix
记录位置。如果我选择了前100条记录,那么应该是来自所有三个表的记录。
从ORDER BY Rand()
选择数据不是我想要的。我只需要选择数据并显示这些数据。
有什么方法可以解决这个问题吗?谢谢
答案 0 :(得分:0)
一个很棒的文章处理几个案例,从简单到间隙,到有间隙的不均匀。
http://jan.kneschke.de/projects/mysql/order-by-rand/
对于大多数一般情况,以下是您的操作方法:
SELECT name
FROM random AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1
这假设id的分布相等,并且id列表中可能存在间隙。有关更多高级示例,请参阅文章
答案 1 :(得分:0)
如果您不希望稍后使用rand()
进行查询,则可以通过首先从rand()
排序的联合选择中插入来创建表格:
INSERT INTO merged (a, b)
SELECT a, b FROM (
SELECT a, b, rand() AS r FROM t1
UNION ALL
SELECT a, b, rand() AS r FROM t2
) ORDER BY r
但是,也请考虑我刚刚遇到的这篇文章:INSERT INTO SELECT strange order using UNION,也许有人可以发表评论。