【问题标题】:Insert names into table if not already existing如果不存在,则将名称插入表中
【发布时间】:2012-09-12 03:33:51
【问题描述】:

我正在尝试构建一个允许用户提交名称以添加到数据库表 (runningList) 的应用程序。在添加名称之前,我想对照另一个表(controlList)检查名字和姓氏。它必须存在于 (controlList) 中,否则回复名称无效。如果名称有效,我想检查名字和姓氏对(runningList)它确保它不存在。如果不存在,则插入名字和姓氏。如果存在,则回复名称已使用。

以下是在我尝试针对 controlList 添加测试之前有效的代码, 在尝试添加额外步骤时,我以某种方式完全破坏了它。

if (mysql_num_rows(mysql_query('SELECT * FROM runninglist WHERE firstname=\'' .$firstname . '\' AND lastname=\'' . $lastname . '\' LIMIT 1')) == 0)
{
 $sql="INSERT INTO runninglist (firstname, lastname)
 VALUES ('$_POST[firstname]','$_POST[lastname]')";
}
else
{
echo "This name has been used.";
 }

有什么建议吗?

【问题讨论】:

    标签: php mysql sql unique


    【解决方案1】:

    在 (firstname, lastname) 上创建一个“唯一”索引。

    然后,当插入运行时,它将失败。忽略错误(或采取其他措施)


    编辑:引用manual

    一个 UNIQUE 索引创建一个约束,使得索引中的所有值 必须是不同的。如果您尝试添加一个带有 与现有行匹配的键值。

    【讨论】:

    • 因为有 firstname 和 lastname 列,unique 是不合适的,因为 John Smith 意味着只允许一个 John 和一个 Smith。
    • 不,不会。您将两列一起索引(为什么我放在括号中)。一指数。 “Ann Smith”与“John Smith”等不匹配。
    • 当我在 phpmyadmin 中创建表时,我为名字和姓氏都选择了索引,是一样的吗?或者这是两个独立的索引实例,我需要的是多列索引?我试图在 phpmyadmin 的索引部分中链接名字和姓氏,但它似乎并不顺利。对不起,如果这很简单,但我对数据库、php 和 mysql 还是很陌生,文档让我很困惑。
    • 您需要一个索引实例,该索引中有两个字段。下面约翰的答案有语法,如果它是手动的,或者如果在 phpMyAdmin 中只添加一个索引并在你之前选择两个字段。如果您有两个索引,每个索引都有一个字段,那么您会遇到您在第一条评论中描述的问题(一个约翰,一个史密斯等)
    • 好的,thanx,所以如果我返回 phpmyadmin 并删除我无法合并的两个索引,然后应用类似于:ALTER TABLE youtableName ADD UNIQUE uniqueName (firstname,lastname) 的代码,那应该可以解决我的问题有问题吗?
    【解决方案2】:

    最好的方法是在两列上创建索引:firstnamelastname

    ALTER TABLE youtableName ADD UNIQUE uniqueName (firstname,lastname)
    

    这样,当你尝试插入已经存在的名字时会产生错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 2013-02-23
      • 2014-04-14
      • 2014-03-08
      • 2012-06-24
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      相关资源
      最近更新 更多