查找sql​​表中是否存在传入数据

时间:2013-05-31 17:24:05

标签: php html sql

我有一个表单,用户应该输入数据(名称,街道名称,街道号码),然后我想检查表格中是否存在该数据(名称,街道名称+街道号码),这样我就可以使用该行代替做一个新的。 有没有一种简单的方法可以做到这一点,还是我必须将数据提取到数组中并以某种方式进行搜索?

我有这段代码:

$sql = "INSERT INTO 725G54_proj_address VALUES           (NULL,'$streetname','$streetnumber')";
$result1 = mysql_query($sql,$con);
$address=mysql_insert_id();
echo "ID of last inserted record is: " . $address;
echo "<br>";


$sql = "INSERT INTO 725G54_proj_contact VALUES ('Null','$name','$telephonenumber')";
$result2 = mysql_query($sql,$con);
$contact = mysql_insert_id();
echo "ID of last inserted record is: " . $contact;


$sql = "INSERT INTO 725G54_proj_LivesAt VALUES ('$contact','$address')";
$result3 = mysql_query($sql,$con);`enter code here`

我想知道的是,如果示例Mainstreet 31已经存在于proj_address中,如果存在,请使用其自动增加的id插入proj_Lives_at。

编辑: 我决定继续发送查询以检查数据是否存在。 我将其加载到变量中并检查它是否为空,但是存在一些问题,因此“if(empty)”不能正常工作。反之亦然(“if(!empty)”)可行。

查询和加载看起来像这样:

$sql2="SELECT 725G54_proj_address.Address_ID, GROUP_CONCAT( cast( concat( 725G54_proj_address.Street_Name, ' ', 725G54_proj_address.Street_Number ) AS char ) SEPARATOR ', ') AS addresses
    FROM 725G54_proj_address
    WHERE 725G54_proj_address.Street_Name = '$streetname' AND 725G54_proj_address.Street_Number= '$streetnumber'
    GROUP BY 725G54_proj_address.Address_ID
    ORDER BY 725G54_proj_address.Address_ID ASC";
$result2=mysql_query($sql2);

编辑2: 我已经尝试切换到使用count()而不是empty(),它发现变量已经填充,即使它不应该。

2 个答案:

答案 0 :(得分:0)

听起来您正在创建多对一关系(可能),因此应该将该数据存储在单独的查找表中。在这种情况下,我建议首先尝试使用“INSERT IGNORE”语句插入该行 (http://dev.mysql.com/doc/refman/5.5/en/insert.html)然后使用mysql_affected_rows()来查看它是否发生了变化。如果没有,那么你知道有一个重复的行,你可以选择,取ID,然后你就完成了。

正如上面其中一条评论中提到的那样,你可以把它变成一个存储过程。

答案 1 :(得分:0)

假设您已经在桌面上创建了正确的键(即,名称,街道名称,街道号码或类似内容中的唯一键),那么MySQL INSERT...ON DUPLICATE KEY UPDATE或可能REPLACE INTO可能在这里很有用。如果要插入的密钥已经存在于表中,前者会将INSERT语句转换为UPDATE,后者将作为常规INSERT,除非密钥已存在,其中在DELETE新数据之前,它将首先INSERT现有行。

当然,对于SELECT COUNT(*) AS n_existing FROM table WHERE...而言,这并不是一个繁重的负担,然后检查结果集中的n_existing以查看是否已存在与您正在准备的相同密钥的行{{1} 1}},并且从principle of least astonishment开始论证INSERT之前SELECT比使用之前可能没有遇到的深奥SQL语句更好由任何其他人来维护你的代码。如果您愿意,该选项仍然存在。