PHP MySQL Query检查记录是否存在

时间:2015-02-14 23:52:34

标签: php mysql sql

我在表格中有以下数据..

+-------------+---------------+--------------+
| activity_id | activity_name | main_unit_id |
+-------------+---------------+--------------+
|           1 | DEA           |           67 |
|           2 | DEB           |           68 |
|           3 | DEC           |           68 |
|           4 | fasdfsadf     |           74 |
+-------------+---------------+--------------+

我想添加另一个活动,但在添加之前我必须确保相同的活动名称不存在针对main_unit_id ... 我写下面的查询,

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " .
    "WHERE main_unit_id = '67' and activity_name = 'DEA'"
);
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);
echo $RESULT_SQL_CHECK_ACTIVITY;

然后打印1表示针对该项目的活动已经存在......

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " .
    "WHERE main_unit_id = '78' and activity_name = 'afsdaf'"
);
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);
echo $RESULT_SQL_CHECK_ACTIVITY;

然后它打印1表示已经存在针对该项目的活动...... 但在这种情况下没有记录......

3 个答案:

答案 0 :(得分:2)

如果你想添加另一个活动,但不想在main_unit_id上重复,那么正确的方法是在该字段上创建一个唯一的索引(或约束):

create unique index idx_activities_mainunitid on activites(main_unit_id);

如果您尝试插入副本,插入将失败。

答案 1 :(得分:2)

mysql_num_rows将返回行数,而不是count(*)结果。

在第一个测试中,count(*)将在一个行中返回1,因此结果将为1.

在第二个测试中,count(*)将在一个行中返回0,因此结果仍为1。

您需要使用获取功能来获取count(*)而不是mysql_num_rows的结果。

修改

即。从:

$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);

要:

list ($RESULT_SQL_CHECK_ACTIVITY) = mysql_fetch_row($SQL_CHECK_ACTIVITY);
  

注意mysql_*函数的使用被视为已弃用,您应该使用提供更好安全性和更多功能的内容,例如作为MySQLiPDO

答案 2 :(得分:0)

$SQL_CHECK_ACTIVITY = mysql_query("SELECT * FROM activities WHERE main_unit_id = '".$project."' and activity_name = '67' limit 1");
    if(mysql_fetch_row($SQL_CHECK_ACTIVITY)) {
        echo 'a activity against this project already exists...';
      }
      else{
}