2013-06-13 43 views
0

因此,在這段代碼中,我剛從表中刪除了一行,因此img_pos的值分別爲: 1,2,3,4,5 現在,他們是(假設我們刪除的第三項): 1,2,4,5 當然,我想這是: 1,2,3,4MySQL - 批量重命名PHP中的所有行

所以我要批量重命名的行。

我得到這個,但似乎並沒有工作....

$sql = "SELECT * FROM $tableImg WHERE img_acc = $accid ORDER BY img_pos"; 
$res = mysql_query($sql); 
$num = mysql_num_rows($res); 

$i = 0; 
$n = 1; 
while($i<$num){ 
    $sql = "SELECT * FROM $tableImg WHERE img_acc = $accid ORDER BY img_pos DESC LIMIT $i,1"; 
    $res = mysql_query($sql); 
    $row = mysql_fetch_array($res); 
    $img_pos = $row['img_pos']; 

    $sql = "UPDATE $tableImg SET img_pos = '$n' WHERE img_acc = '$accid' AND img_pos = '$img_pos'"; 
    $res = mysql_query($sql); 
    $i++; 
    $n++; 
} 
mysql_close(); 

$ tableImg只是包含表名稱,工作得很好的變量。 我覺得問題出在「$ img_pos = $ row ['img_pos'];」的位置,因爲所有的querys在某個地方都有不同的使用方式,不過它們應該有點不同,並且它們應該可以工作......

在此先感謝!

+0

你不應該__need__做到這一點,PK應該是備案 –

+0

@MarkBaker的壽命,你是正確的,但有一個固定值沒有證據表明img_pos是主鍵。我的問題是:編號中有「漏洞」真的很重要嗎?他們仍然會按照正確的順序。 – GarethL

+0

好吧,我使用img_pos以正確的順序放置圖像,所以如果我啓動「moveImageUp」腳本,則4將被稱爲3,並且沒有任何移動。 而img_pos不是主鍵,它只是一個簡單的簡單列。 關於如何使這成爲可能的任何想法? 只需選擇所有你想要的和重命名他們1,2,3 ...不應該是那麼複雜的權利? – AmarokM

回答

1

最後我簡單地做這樣的:

$i = 1; 
while($row = mysql_fetch_array($res)){ 
    $old_pos = $row['img_pos']; 
    $sql = "UPDATE $tableImg SET img_pos = $i WHERE img_acc = $accid AND img_pos = $old_pos"; 
    $res = mysql_query($sql); 
    $i++; 
}; 
0

這很可能,完全沒有必要。關於數字數據的好處在於,您不必看它,因此無論它是否有點兒尷尬都無所謂,是嗎?

如果您真的想要這樣做(比如說,您正在構建一個應用程序,而您正在清理在刪除時刪除的內容),下面的示例將在SQL中執行,如下面的簡單示例所示:

CREATE TABLE disorder (id int,stuff CHAR(6)); 
CREATE TABLE disorder2 (id SERIAL,stuff CHAR(6)); 
INSERT INTO disorder (id,stuff) 
VALUES 
('1','ONE'), 
('2','TWO'), 
('3','THREE'), 
('4','FOUR'), 
('5','FIVE'); 
DELETE FROM disorder WHERE id='3'; 


INSERT INTO disorder2 (stuff) SELECT stuff FROM disorder; 
TRUNCATE TABLE disorder; 
INSERT INTO disorder SELECT * from disorder2; 
DROP TABLE disorder2; 

這可以在sqlfiddle的行動中看到,但它很明顯。如果你從混亂中做出SELECT *,你會明白爲什麼你可能不應該這樣做。

你的表格確實需要有主鍵。這加快了搜索/索引並使它們有用。查閱數據庫的正常形式,以便對推理進行徹底的討論。