Php 帮助唯一标识合并列

Php 帮助唯一标识合并列,php,mysql,Php,Mysql,我如何唯一地标识两个或多个列,我在数据库中使用了名为address的表,现在address有street name、suite name和street num等字段 斯特纳姆|斯特纳姆|萨特纳姆 1 | xyz | 32 1 | xyz | 32 现在我如何才能唯一地使用这三个列。也就是说,我想检查这三列是否已经插入。如果任何字段值的更改超过其“确定”值,它将插入新值。但如果这三个字段都相似,请帮助我组合识别这三个字段。您可以这样做 SELECT * FROM table WHERE col

我如何唯一地标识两个或多个列,我在数据库中使用了名为address的表,现在address有street name、suite name和street num等字段

斯特纳姆|斯特纳姆|萨特纳姆


1 | xyz | 32

1 | xyz | 32


现在我如何才能唯一地使用这三个列。也就是说,我想检查这三列是否已经插入。如果任何字段值的更改超过其“确定”值,它将插入新值。但如果这三个字段都相似,请帮助我组合识别这三个字段。

您可以这样做

 SELECT * FROM table WHERE col1 = $something AND col2 = $something2 AND col3 = $something3  
(还记得escpaing php变量吗) 如果记录被返回,则表示它存在。您还可以添加限制1以加快速度


如果您的问题是确保表中没有重复(对于这三列),那么最好的解决方案可能是在这三列上添加唯一索引

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

您可以通过添加
unique
约束来完成

ALTER TABLE your_table ADD UNIQUE(strnum, strnam, sutname);
然后执行以下操作:

INSERT IGNORE INTO your_table (strnum, strnam, sutname) VALUES ('1', 'xyz', 'etc');
如果该值已经存在,则不会发生插入,也不会引发错误(这就是忽略部分)

顺便问一下,你为什么用这么短和模糊的列名?现在不再是DOS时代了,你可以用你的列名来描述

$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!');

编辑我刚刚添加了一个缺少的
这样就可以解析…

我如何使用php实现这一点。。。这意味着我有三个字段和三个变量,我如何检查这三个变量的值在表的三列中是否相同…如果我在不使用简单的单一查询的情况下唯一地创建或修改键,它是否与上面的查询相同…??@Aditii-抱歉,我不明白你的意思。提供的示例附带了解释,我认为它的作用、方式和原因非常清楚。如果没有,那么您需要阅读一些mysql文档;ALTER TABLE您的_TABLE ADD UNIQUE(strName);ALTER TABLE您的_TABLE ADD UNIQUE(sutname);与上面的查询类似…?这不是处理关系数据库的正确方法。对于任何可能认为这是检查记录是否存在然后插入的方式的人,不要这样做。戴夫,我不是想抨击你,我也不是投反对票。@N.B.我接受你的话,没有冒犯你的意思-我会第一个承认我不知道一切。我认为您正在做的是在所有要链接的字段上添加一个
唯一的
多字段索引?当您尝试执行重复插入时,这不会引发重复键错误吗?是的,但是如果您使用
insert IGNORE
,则不会出错,并且会忽略您要插入的数据。另外,还有一个“INSERT…ON DUPLICATE KEY UPDATE”语句,允许您更新命中其唯一键的行。