2011-08-18 63 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文档。 –