Php 使用多个检查将MySQL插入到

Php 使用多个检查将MySQL插入到,php,mysql,Php,Mysql,在facebook应用程序中,他有以下DB列: id (auto_increment) facebook_id (VARCHAR) email (VARCHAR) like_name (VARCHAR) like_id (VARCHAR) 如果我们想为同一个facebook\u id允许多个条目,但不允许为每个facebook\u id重复相同的id,那么查询是什么?我们希望允许多个facebook_id具有相同的like_id。我们需要设置任何索引吗?我们尝试进行重复的密钥更新,但不起作用

在facebook应用程序中,他有以下DB列:

id (auto_increment)
facebook_id (VARCHAR)
email (VARCHAR)
like_name (VARCHAR)
like_id (VARCHAR)
如果我们想为同一个facebook\u id允许多个条目,但不允许为每个facebook\u id重复相同的id,那么查询是什么?我们希望允许多个facebook_id具有相同的like_id。我们需要设置任何索引吗?我们尝试进行重复的密钥更新,但不起作用

    $likessql = $conn->prepare('INSERT IGNORE likes (facebook_id,email,like_name,like_id) VALUES(:facebook_id,:email,:like_name,:like_id) ON DUPLICATE KEY UPDATE like_id = :like_id');
    foreach ($likes as $like) {
        $likessql->execute(array(
        ':facebook_id' => $facebookid,
        ':email' => $email,
        ':like_name' => $like['name'],
        ':like_id' => $like['id']
    ));

通过将两个主索引设置为primary Seq\u in\u index=1,Column\u name=facebook\u id,我实现了这一点。第二个索引是PRIMARY Seq\u in\u index=2,Column\u name=like\u id。基本上,我必须将主键设置为两个项。

您可以有一个包含多个列的唯一约束。这将防止使用多个主键,在我看来,这是正确的方法

有关更多详细信息,请参阅


祝你好运

请展示索引约束当前的样子。如果您对自己的问题有答案,请回答并标记为正确。@Davidisen很好。除了在您的案例中有一个唯一的约束PK(您已经弄明白了),还有一件事:您要么忽略,要么在发现重复时更新。不是两者都有。因此,我建议放弃整个复制的关键部分。