2013-01-16 67 views
0

我有3個表這是不相同的彼此。根據我的要求,我必須將所有這些表格記錄複製到另一個表格。 這部分是好的。我的問題是我現在插入的記錄是按順序排列的。 像有沒有什麼辦法在mysql表中混合(更改順序)行?

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

我想要做的是change/mix記錄positions.Like如果我選擇前100條記錄有應該是記錄從所有三個表。

ORDER BY Rand()中選擇數據不是我想要的。我只需要選擇數據並顯示這些數據。 有什麼辦法可以解決這個問題嗎?謝謝

+2

如果您需要特定順序的數據,那麼有一種**方式可以保證 - 當檢索行時,通過在最外面的SELECT'查詢中提供'ORDER BY'子句。 –

+0

要隨機選擇語句的順序,可以使用[rand](http://dev.mysql.com/doc/refman/5.5/en/mathematical-functions.html#function_rand)函數。 – hd1

+0

插入時,您是否有每個記錄的唯一索引號? – bonCodigo

回答

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列表差距。看到這篇文章的更高級的例子

+0

如果你看看[this](http://sqlfiddle.com/#!2/e8509/6 )似乎並不真的*完全隨機*但隨機連續;)在這種情況下,它不保證[給x數](http://sqlfiddle.com/#!2/e8509/6)行或者.. – bonCodigo

+0

@bonCodigo是的朋友我已經嘗試過這個,但它不會像我預期的那樣工作 – vinu

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,也許有人可以評論。

+0

感謝朋友,我明白了。由於我的桌子彼此不同,所以再次創建一個桌子,對我來說,我會試試.. – vinu

相關問題