帮助唯一识别组合列

时间:2011-08-18 10:38:36

标签: php mysql

如何唯一地标识两个或更多列,我在数据库中使用了表名为address的地址,现在地址包含街道名称,套件名称和街道号等字段。

strnum | strnam | sutname


1 | xyz | 32

1 | xyz | 32

现在我怎么能把这三列唯一。那是我想检查这三列是否已经插入。如果任何字段值改变而不是ok,它将插入新的。但是如果所有三个相似的领域......帮我合并识别这三个领域。

4 个答案:

答案 0 :(得分:2)

您可以通过添加unique约束来实现。

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

然后执行以下操作:

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

如果该值已经存在 - 将不会发生插入并且不会引发错误(这就是IGNORE部分的内容)。

那么为什么你要使用这么短而模糊的列名呢?这不再是DOS时代了,你可以用你的列名来描述。

答案 1 :(得分:0)

只需将它们作为表结构中的唯一键添加,您将无法插入其中的两个

答案 2 :(得分: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!');

编辑我刚添加了一个;,所以这解析了......

答案 3 :(得分:-1)

你可以做这样的事情

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

(记得关于escpaing php变量) 如果记录被返回,则表示它存在。您还可以添加LIMIT 1以使其更快。

如果您的问题是关于ENSURING表中没有重复(对于这3列),那么最好的解决方案是在这三列上添加UNIQUE索引。