有没有办法在mysql表中混合(更改顺序)行?

时间:2013-01-16 07:35:25

标签: mysql phpmyadmin

我有 3张表,彼此并不相同。根据我的要求之一,我必须将所有这些表记录复制到另一个表中。 那部分没关系。我的问题是我现在插入的记录是订单。 像

first 100 records from table1
second 100 records from table2
third 100 records from table3

我想要做的是change/mix记录位置。如果我选​​择了前100条记录,那么应该是来自所有三个表的记录。

ORDER BY Rand()选择数据不是我想要的。我只需要选择数据并显示这些数据。 有什么方法可以解决这个问题吗?谢谢

2 个答案:

答案 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,也许有人可以发表评论。