2011-08-18 77 views
0

如何唯一標識兩個或多個列,我已經在數據庫中使用表命名地址,現在地址具有像街道名稱,套件名稱和街道編號等字段。唯一標識組合列的幫助

strnum | strnam | sutname


1 | xyz | 32

1 | xyz | 32

現在我該如何唯一地將這三列。那是我想檢查這三列是否已經插入。如果任何字段值被改變,它會插入新的字段。但如果全部三個類似的領域..幫助我結合確定這三個領域。

回答

0
$query = "SELECT * FROM `address` WHERE `strnum` = '$strnum' AND `strnam` = '$strnam' AND `sutname` = '$sutname' LIMIT 1"; 
$result = mysql_query($query); 
if (!mysql_num_rows($result)) { 
    // If you get to here, there is no existing record 
    $query = "INSERT INTO `address` (`strnum`,`strnam`,`sutname`) VALUES ('$strnum','$strnam','$sutname')"; 
    if (!mysql_query($query)) print('Insert failed!'); 
} else print('Record already exists!'); 

編輯我只是增加了一個失蹤;所以這解析...

+0

這不是處理關係數據庫的正確方法。只要任何人可能認爲這是你如何檢查是否存在記錄然後插入 - 不要這樣做。我並不是試圖打擊你,戴夫,而且我也沒有下調。 –

+0

@ N.B。我接受你說的話,沒有冒犯 - 我會第一個承認我什麼都不知道。我認爲你正在做的是在你想鏈接的所有字段上添加一個'UNIQUE'多字段索引?當你嘗試做一個重複的插入時,這不會引發重複鍵錯誤嗎? – DaveRandom

+0

是的,但是如果你使用'INSERT IGNORE',那麼它不會錯誤並且會忽略你想要插入的數據。或者,還有「INSERT ... ON DUPLICATE KEY UPDATE」語句,允許您更新其所點擊的唯一鍵的行。 –

-1

你可以做這樣的事情

SELECT * FROM table WHERE col1 = $something AND col2 = $something2 AND col3 = $something3 

(記住escpaing PHP變量) 如果返回的記錄就意味着它的存在。您還可以添加LIMIT 1以使其更快。

如果您的問題是關於確保表中沒有重複項(對於這3列),那麼最好的解決方案是在這三列上添加UNIQUE索引。

+0

我怎麼可以這樣使用PHP ...這意味着我有3場和三個變量我怎麼能檢查是否值這三個變量是相同的3列表或相同... – Aditii

0

只需添加他們作爲唯一鍵的表結構,你就無法通過添加unique約束插入他們兩個

2

你做到這一點。

ALTER TABLE your_table ADD UNIQUE(strnum, strnam, sutname); 

然後你做到以下幾點:

INSERT IGNORE INTO your_table (strnum, strnam, sutname) VALUES ('1', 'xyz', 'etc'); 

如果該值已經存在 - 不插入會發生並且沒有錯誤將提高(這是無視那部分)。

順便說一句,爲什麼你使用這樣短而含糊的列名?這不再是DOS時代,你可以用你的列名描述。

+0

嘿,這是整潔的,從來不知道你可以做到這一點... – DaveRandom

+0

如果我創建或修改密鑰唯一沒有使用簡單的單一查詢是否與上述查詢相同...? – Aditii

+0

@Aditii - 抱歉,我不明白你的意思。提供的例子有解釋,我認爲它很清楚它的作用,方式和原因。如果沒有,那麼你需要閱讀一些mysql文檔。 –