在几列上使用UNIQUE键需要帮助

时间:2011-09-14 08:07:07

标签: mysql

我有下表:

enter image description here

正如您所看到的,index_lang是一个限制情侣nid /语言的唯一键。

现在,如果我将nid和语言的值插入这样的内容:

enter image description here

如果有一对nid / language对的行已经插入到该表中,我怎么能检查PHP,因为我似乎无法检索index_lang键的值。我假设这个index_lang键会自动获取插入的2列的值,因此根据上表,第1行唯一键的值将为:'1chinese'

编辑:我正在使用drupal API在此表中插入数据,现在插入数据的PHP代码如下所示:

foreach ( $user_lang as $k=>$v ){
    $lang_query = db_insert('my_table')
      ->fields(array(
        'nid' => $og_group->etid,
        'language' => $v))
      ->execute();  
}

$ user_lang是一组语言。

第二次修改:

我想要一个IGNORE声明来插入我的数据以避免重复并忽略错误,尽管没有使用Drupal DB API这样的事情,如果我对如何做没有任何想法...

3 个答案:

答案 0 :(得分:1)

首先想到SQL。您需要此查询

SELECT COUNT(*) FROM table_name WHERE nid=1 AND language='Chinese'

通过这种方式,您可以轻松获取PHP - 其查询将取决于您使用的是mysql还是mysqli

答案 1 :(得分:1)

索引与列不同。它被mysql用于内部使用,您无法将其作为列读取。

但是上面应该阻止你插入双重条目。只需通过尝试添加nid = 1和language =“Chinese”的行来检查它。您应该收到一条错误消息(唯一密钥违规。)

从php你可以尝试插入行。如果您只是不需要插入,可以使用错误消息向用户显示内容。

如果您希望更新当前值,可以在sql中使用ON DUPLICATE KEY UPDATE

最后你当然可以先做一个select ... from languages where nid=1 and language="Chinese",然后决定你想用它做什么。

答案 2 :(得分:0)

您无法检索index_lang 索引的值。

SELECT 1 FROM mytable WHERE nid=1 AND language='Chinese'