2013-10-03 25 views
1

我有一個簡單的表,我用PHP和MySQLi填充。該表只包含一個字段,我已將其設置爲避免重複的主鍵。除MySQLi按字母順序對輸入進行排序外,每件事情都是正確的,即使我沒有以這種方式將它們放入數據庫。我想稍後從表格中提取出來,並按照將項目放入數據庫的順序將所有內容回顯出來。避免自動按字母順序排序MySQLi

有沒有辦法輕鬆完成這件事?我需要使用不同的字段作爲主鍵嗎?

$mysqli = connect_db(); 
$mysqli->query('TRUNCATE TABLE things'); 
$things = [bat, cat, apple, zero]; 
for($i = 0; $i < count($things); $i++){ 
    $query = $mysqli->prepare('INSERT INTO things (name) VALUES (?)'); 
    $query->bind_param('s', $things[$i]); 
    $query->execute(); 
    $query->close(); 
} 
$mysqli->close(); 

// The table puts them in the following order: apple, bat, cat, zero 
+0

所以只需在您選擇 – 2013-10-03 21:26:23

+2

時添加'ORDER by ID'爲什麼您要在循環內部保留'準備好查詢?關於您的問題:如果數據庫沒有按照您的要求進行訂購,您如何從數據庫中獲取數據? – TheWolf

+0

我沒有ID字段。我一直在準備查詢,因爲我綁定了不同的值並執行查詢。有沒有一種方法來執行並插入數組中的每個值一次沒有for循環? –

回答

4

你將不得不添加一個INT AUTO_INCREMENT字段到您的表結構。您可以在輸出時輸入您的ID字段ORDER BY。有了這個做,你可以列到你的表像這樣的補充:

$things = [bat, cat, apple, zero]; 
$val = ''; 
$query = $mysqli->prepare('INSERT INTO things (name) VALUES (:name)'); 
$query->bind_param(':name', $val); // $val is bound by reference! 

for($i = 0; $i < count($things); $i++){ 
    $val = $things[$i]; 
    $query->execute();   
} 

$query->close(); 
$mysqli->close(); 

聲明:我通常與PDO工作,因此無法保證這段代碼可以正常使用。這只是爲了得到一次準備語句然後在循環中綁定和執行的想法。

+0

我沒有完全使用你的代碼,但謝謝你幫助我理解這個概念。 –

1

這是應該如何是,因爲該字段是主鍵,以使得它的一個索引,MySQL的證明它爲要被分選(A-Z)或(1-N)時,其索引和只有一個字段。您可以添加其他字段(Id作爲INT和主鍵),然後將您的字段更改爲UNIQUE索引。

0

試試這個:

$things = array('bat','cat','apple','zero'); 
foreach($things as $thing) { 
    // $thing = bat, cat, apple, zero 
} 

編輯: 剛纔看到你沒有一個ID字段,添加一個! id(int 11)auto_increment primary_key等,那麼你應該不會笑