2012-05-31 78 views
1

我有一個數據庫列如下:MySQL的查找匹配

id 
50 
55 
56 
62 
63 
64 
65 
68 
70 
72 
80 

etc... 

我想通過以下公式中的id列迭代發現如果公式的結果是在同一列的ID號。我想計算ID列中基本3個記錄集的所有可能組合。

第一個循環: ((second_id_number - first_id_number)*變量decimal)+ second_id_number是否等於id列中的數字?

根據公式,第一個循環爲 (55-50)* 2.00(作爲變量十進制的一個例子)+ 55 = 65. 65在列表中=> 65用2個等於它的記錄標記

第二個循環: ((third_id_number - first_id_number)*變量decimal)+ second_id_number是否等於id列中的數字? (56-50)* 2.00(作爲可變十進制的一個例子)+ 56 = 78 78不處於列表=> 78未標記

第三循環: 是否((fourth_id_number - first_id_number)*變量十進制)+ second_id_number等於ID列中的數字?

etc ...

我希望結果顯示所有標記的記錄。帶標記的記錄是3條記錄的集合,其中第三條記錄是公式的結果。

任何人有任何想法?在MySQL中可能嗎?

謝謝

+0

您能否提供您的樣本數據應該看起來像什麼樣的輸出? –

+0

在第二個循環中,您將'second_id_number'替換爲56,但這是third_id而不是第二個。另外,「etc ......」是什麼意思?這是否意味着你繼續下去,直到沒有更多的記錄爲止 –

回答

0

如果我正確理解你的要求,這聽起來像你想使用一個桌子上,例如自聯接

SELECT ... 
FROM yourtable AS parent 
LEFT JOIN yourtable AS child ON 
    FLOOR((parent.second_id_number - parent.first_id_number) * variable) + parent.second_id) = child.id 
+0

我認爲它比這更復雜OP用'(55-50)'替換'(second_id_number - first_id_number)''這表明second_id_number是第一行之後的行 –

+0

Marc:謝謝你的回答Iam不是程序員請指出你是如何寫出的:second_id_number,first_id_number所以我可以看到循環謝謝 – user1426027

0

你可能會攜帶這樣的前鋒,滿足你的第一個「循環」

select a.id as first_id_number 
    , b.id as second_id_number 
    , ((b.id - a.id) * 2) + b.id as third_id_number 
from my_table as a 
    join my_table as b on a.id = (select max(id) from my_table where id < b.id) 
where ((b.id - a.id) * 2) + b.id in (select id from my_table) 

根據你的描述和測試數據,這將顯示出與first_id_number 50 65「標記」和62.

警告:在SQL Server上使用我所做的認爲是相當標準的語法。我會理解,如果有人寧願將其作爲與where子句中的select max...位交叉連接,而不是連接謂詞。

+1

你可以使用[sqlfiddle](http ://sqlfiddle.com/#!2/c0fb3/2)如果你沒有安裝MySQL –

+0

謝謝,Conrad。我以前用過的時候,當我告訴我的代碼不工作時 –

+0

Tim:謝謝你的回答。我沒有看到代碼中的迭代是如何完成的。 – user1426027