2013-01-02 31 views
0

欲由用戶定義的整數刪除從我的.sql表之一的行(1至rowCount時())。下面是僞代碼,但它說明了我想要的東西。刪除特定行(由int類型的變量指定)

$i = 1; //example 
$quedb = $db->query(" 
    DELETE * 
     FROM table 
     WHERE ROWNUMBER = '$i' 
"); 

有沒有辦法在SQL環境中做到這一點?我不想根據特定元素刪除一行(我的一位朋友建議查詢我定義的行中的元素,但我只想刪除第n行,其中n是用戶定義的)。

+2

第n行什麼意義?就像一個具有「id」字段的行作爲某個n值?我們可能無法告訴數據庫按照它們的存儲順序刪除第10或第20行,我們必須提供某個字段名稱標準 –

+0

我希望能有一個簡單的解決方案。第n行我的意思是「刪除表中的第一行」或「刪除第二行」等等等等「刪除第n行」。 – gator

+1

如果你有一個id字段,它指定了行的插入順序,最可能是一個自動增量,然後很容易判斷。但是如果沒有主要的或沒有唯一的ID字段,或者可能是時間戳,那麼它很難告訴databse哪第n行。我們不能告訴它存儲在文件系統 –

回答

1

你不應該那樣做。
「第n行」是在數據庫的背景下廢話。
數據庫與您熟悉的列表有些不同。他們根本沒有預定義的順序。 數據庫是行,其僅在選定的時間採取順序,總是不同的,是根據選擇順序字段(一個或多個)的一個抽象堆。

要確定一行,你必須使用唯一標識符,它發明了服務於這個目的。
因此,將id auto_increated主鍵字段添加到您的表中並使用它來標識該行。 「其他表」不僅是保持一致性的理由。無論您是否添加或刪除了一些行,您網站上的自己的鏈接也需要一致的地址。

如果要列舉你的輸出,做到這一點在選擇的時候,使用PHP。這是唯一正確的方法。

請,自己發明輪子之前,學習數據庫設計非常基本的。
或者至少遵循更有經驗的人的好建議。

+0

你是對的。我不想這樣做,因爲我不得不重寫一大段代碼,但我認爲這是長期值得的。 – gator

-1

你可以使用嵌套查詢來做到這一點。是這樣的...

從表中刪除其中id在公司(選擇從表限制5,1 ID)

但是真的不建議作爲的行爲不是很一致。