我試圖在MySQL中重新創建一個非常大的幸運數字,用於娛樂數學問題。MySQL中的幸運數字 - 刪除每第n行
該規則實質上是'查看數字列表中的第n個數字,然後刪除它之後的第n個實例。
最簡單的例子是自然數列表2中的第二個數字。因此,我們將刪除2然後4然後6然後8等等。然後,您將看看下一個數字'3',並刪除第3,第6,第9條款。有趣的部分來自於這樣一個事實,即你完全從數字列表中刪除這些數字,所以它與正常的數學非常不同。 '3'之後的下一個數字是'7',因爲你已經刪除了4,5和6,所以你再看看刪除每個第七個條目。
這基本上只是計算,而不是實際的數學 - 我可以在PHP和MySQL一起做的很好。我面臨的問題是,你必須一次性從數據庫中獲取整個數組,而當你達到數以億計的普通計算機時,卻無法應對記憶。這個問題只需要在SQL中完成,程序之間不需要傳輸數據。
有關幸運數字的更多信息:http://en.wikipedia.org/wiki/Lucky_number解釋要比我上面的好得多。我有一個高達1,000,000,000(8 GB)的奇數整數數據庫(即每隔第二期就已經刪除)。我可以相當愉快地獲得下使用數量(稱之爲X)在PHP中:用do-while循環,以從n個計數= 3-1,000,000,000(實際上n的上限可能成爲各地
SELECT * FROM table ORDER BY ID LIMIT n,1
150,000,000的數字被刪除),但每次(在循環中),它都需要詢問數據庫刪除每個第x個數字。
這是我不得不從另一個計算器問題,選擇每個第x號代碼:
SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, [column name]
FROM (
SELECT @row :=0) r, [table name]
) ranked
WHERE rownum % [x] = 1
我想我只需要這成爲一個delete語句,但我真的與掙扎。我是一位只具有中等SQL知識的PHP程序員。通過這樣做,我只會在MySQL和PHP之間傳輸指令,而不是很多數據。
但是,如果有人想要整個豬並在MySQL中編寫循環(不只是刪除語句,我不知道這是甚至可能!),那麼我會很好地利用它。
取其將被刪除了所有的ID,那麼就通過'DELETE FROM table_name的WHERE ID IN($ IDS)'運行它們。 –