2016-08-18 23 views
2

我在我的表中有八個數字。我需要返回28個不同的組合。我以爲我的代碼是正確的,但它會返回無限數量的組合。我需要查詢,以提供不同數量的選擇組號碼

這是代碼。

SELECT t1.ID AS Number_1, 
     t2.ID AS Number_2, 
     t3.ID AS Number_3, 
     t4.ID AS Number_4, 
     t5.ID AS Number_5, 
     t6.ID AS Number_6 
    FROM cTop8 AS t1, 
     cTop8 as t2, 
     cTop8 as t3, 
     cTop8 as t4, 
     cTop8 as t5, 
     cTop8 as t6 
where t2.id <> t1.id 
    and t3.id <> t2.id 
    AND t3.id <> t1.id 
    and t4.id <> t3.id 
    AND t4.id <> t2.id 
    AND t4.id <> t1.id 
    and t5.id <> t4.id 
    AND t5.id <> t3.id 
    AND t5.id <> t2.id 
    AND t5.id <> t1.id 
    and t6.id <> t5.id 
    AND t6.id <> t4.id 
    AND t6.id <> t3.id 
    AND t6.id <> t2.id 
    AND t6.id <> t1.id 
ORDER BY rand() 
+1

可能通過格式化當前的選擇開始。 – dnoeth

+0

cTop8的模式? –

+0

無限?不是,只有8 * 7 * 6 * 5 * 4 * 3 = 20160。 – jarlh

回答

0

您可以使用LIMIT將結果限制爲28點的組合,並NOT IN()使代碼更易讀:

SELECT t1.ID AS Number_1, 
     t2.ID AS Number_2, 
     t3.ID AS Number_3, 
     t4.ID AS Number_4, 
     t5.ID AS Number_5, 
     t6.ID AS Number_6 
    FROM cTop8 AS t1, 
     cTop8 as t2, 
     cTop8 as t3, 
     cTop8 as t4, 
     cTop8 as t5, 
     cTop8 as t6 
where t1.id NOT IN(t2.id,t3.id,t4.id,t5.id,t6.id) 
    AND t2.id NOT IN(t3.id,t4.id,t5.id,t6.id) 
    AND t3.id NOT IN(t4.id,t5.id,t6.id) 
    AND t4.id NOT IN(t5.id,t6.id) 
    AND t5.id <> t6.id 
ORDER BY rand() LIMIT 28; 
+0

可以返回相同的一組數字,但順序不同。 (看看Gordon Linoff的答案。) – jarlh

0

我想你想要這樣的:

SELECT t1.ID AS Number_1, 
     t2.ID AS Number_2, 
     t3.ID AS Number_3, 
     t4.ID AS Number_4, 
     t5.ID AS Number_5, 
     t6.ID AS Number_6 
FROM cTop8 t1 JOIN 
    cTop8 t2 
    ON t1.id < t2.id JOIN 
    cTop8 t3 
    ON t2.id < t3.id JOIN 
    cTop8 t4 
    ON t3.id < t4.id JOIN 
    cTop8 t5 
    ON t4.id < t5.id JOIN 
    cTop8 t6 
    ON t5.id < t6.id; 

如果您正好想要28,那麼你可以添加LIMIT 28。如果你想要它們是隨機的:

SELECT t1.ID AS Number_1, 
     t2.ID AS Number_2, 
     t3.ID AS Number_3, 
     t4.ID AS Number_4, 
     t5.ID AS Number_5, 
     t6.ID AS Number_6 
FROM cTop8 t1 JOIN 
    cTop8 t2 
    ON t1.id < t2.id JOIN 
    cTop8 t3 
    ON t2.id < t3.id JOIN 
    cTop8 t4 
    ON t3.id < t4.id JOIN 
    cTop8 t5 
    ON t4.id < t5.id JOIN 
    cTop8 t6 
    ON t5.id < t6.id 
ORDER BY rand() 
LIMIT 28; 
+0

您不需要LIMIT子句。無論如何,不​​超過28行將被退回。 (8 * 7 * 6 * 5 * 4 * 3/6!= 28) – jarlh

+0

@jarlh。 。 。返回的行數取決於'id'的不同值的數量。我沒有看到問題中指定的內容。 –

+0

「我的表格中有八個數字,我需要返回28個不同的組合。」 – jarlh

相關問題