2014-07-26 33 views
0

我有一個數組,它給了我表中不同概念的順序。因爲它是一個從0開始的數組。我有不同的選項來存儲概念的順序。我的問題是:mysql表的id是否可以從0開始?

  1. 這是正確的,使MySql表的ID以0開頭?如果是這樣,這將是最簡單的選擇

  2. 如果不是,我可以使數組以1開頭?

  3. 第三個選項是創建一個列來存儲訂單。這在用戶創建新項目時會產生新問題。由於MySql不接受2個自動增量列。

$order = $_GET['order']; 
print_r ($order); // this gives: Array ([0] => first [1] => second [2] => third) 

foreach($order as $key => $value) { 
    mysqli_query($con,"UPDATE principal 
         SET concept = $value 
         WHERE id = $key"); 
} 
+1

的ID本身可以是任何的獨特。即使是一個UUID字符串。如果你的問題是特定於'AUTO_INCREMENT'的,那麼,如果你想手動分配ID,你不需要/需要。 –

+0

該ID是自動遞增的,必須自動分配 – Nrc

回答

0

如果我沒有得到它,你顯然希望使用同一列的兩個完全不同的目的:

  • 唯一標識行
  • 存儲其顯示順序

雖然它可能可以做到,但恕我直言,它很混亂,很難維護。從設計角度來看,最好只使用兩列。它更乾淨,並且不會強制您在需要設置不同順序時更新所有鏈接表中的鍵。

至於AUTO_INCREMENT功能,它是一種機制,旨在生成唯一遞增數字無意義。它主要爲surrogate keys而設計,它不允許像重用值那樣簡單。

你的其他問題:

這是正確的,使一個MySQL表的ID以0開頭的?

沒有什麼錯(其實我現在就做,然後),但MySQL有一個功能,使得它很難做到:NO_AUTO_VALUE_ON_ZERO

如果沒有,我可以使陣列從1開始?

如果輸入數組:

$foo = array(1 => 'a', 'b', 'c', 'd'); 

如果你已經擁有了它:

foreach($order as $key => $value) { 
    mysqli_query($con,"UPDATE principal 
     SET concept = $value 
     WHERE id = " . ($key+1)); 
} 

$key = 0; 
foreach($order as $value) { 
    $key++; 
    mysqli_query($con,"UPDATE principal 
     SET concept = $value 
     WHERE id = $key"); 
} 

foreach(array_values($order) as $key => $value) { 
    mysqli_query($con,"UPDATE principal 
     SET concept = $value 
     WHERE id = " . ($key+1)); 
} 

// ... 
+0

我的問題的答案2.我認爲我不能適用於這種情況,因爲它是一個動態表,我不知道值 – Nrc

+0

我已經添加了兩個建議 –

1

這是正確的,使一個MySQL表的ID以0開頭的? -

如果不是,我可以使數組以1開頭嗎? -

由於MySql不接受2個自動增量列。 - 您應該更改您的數據庫設計,以便您可以將主要/外部數據關聯起來。

現在不知道您的具體要求是什麼,但你應該在兩個不同的表分割數據,在這兩個表中公共列將充當兩者之間的爲主要/外鍵。


如果你想從1開始的數組ID不是使用

<?php 
    $arr = array("a","b","c"); 
    array_unshift($arr,""); 
    unset($arr[0]); 
    print_r($arr); 

Demo

+0

如何使該數組的關鍵字從1開始? – Nrc