Php 如何检查列1对于列2是否有两个不同的值

Php 如何检查列1对于列2是否有两个不同的值,php,mysql,database,insert,duplicates,Php,Mysql,Database,Insert,Duplicates,我试图通过UNIQUE进行插入,但我被卡住了,我想知道的是我将如何做,使列a始终是唯一的,除非列C有两个不同的值,然后它将在数据库中插入列a的第二行,其中列C是不同的 a|b|c ----- 1|2|3 2|4|5 1|6|7 所以我目前正在使用这个sql表 CREATE TABLE `Player` ( `id` int(11) NOT NULL auto_increment, `playername` varchar(255) NOT NULL, `SteamID` varchar(255

我试图通过UNIQUE进行插入,但我被卡住了,我想知道的是我将如何做,使列a始终是唯一的,除非列C有两个不同的值,然后它将在数据库中插入列a的第二行,其中列C是不同的

a|b|c
-----
1|2|3
2|4|5
1|6|7
所以我目前正在使用这个sql表

CREATE TABLE `Player` (
`id` int(11) NOT NULL auto_increment,
`playername` varchar(255) NOT NULL,
`SteamID` varchar(255) NOT NULL UNIQUE,
`position` varchar(255) NOT NULL,
`lastlogin` varchar(255) NOT NULL,
`approved` varchar(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;
有了这个疑问

$sql1= "INSERT IGNORE INTO Player (playername, SteamID, position, lastlogin, approved) VALUES ('$name', '$id', '$position', '$lastlogin', '$approve')";
它以我想要的方式插入,因此每个streamid只有1个,但如果同一个streamid的位置有两个值,它也不会插入

编辑:

我所拥有的是一个xml文件,我根据xml文件中的数据加载并将数据插入数据库,我需要的是以下内容

$xml = simplexml_load_file("players.xml");
foreach($xml->children() as $player)
{
    $id = $player->attributes()->id;
    $profile = new SteamProfile($id);
    $name = mysql_real_escape_string($profile->getUsername());
    $lastlogin = $player->attributes()->lastlogin;
    $position = $player->lpblock->attributes()->pos;
    $sql1= "INSERT IGNORE INTO Player (playername, SteamID, position, lastlogin, approved) VALUES ('$name', '$id', '$position', '$lastlogin', '$approve')";
    if (!mysql_query($sql1,$connection))
    {
            die('Insert Error: ' . mysql_error());
    }
} 
因此,读取xml文件,然后将文件中的数据插入数据库。有时xml文件会包含

<player id="76561197961716203" lastlogin="8/22/2014 10:49:28 PM">
        <acl id="76561197961543041"/>
        <acl id="76561197988417990"/>
        <lpblock pos="273,93,-102"/>
        <lpblock pos="1322,62,-1711"/>
    </player>


此时,我需要为第二个
创建第二行,我不确定您想要实现什么,但您可以在列的组合上设置一个唯一的限制,在您的情况下
streamid
position

CREATE TABLE `Player` (
`id` int(11) NOT NULL auto_increment,
`playername` varchar(255) NOT NULL,
`SteamID` varchar(255) NOT NULL,
`position` varchar(255) NOT NULL,
`lastlogin` varchar(255) NOT NULL,
`approved` varchar(255) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `unique_combination_of_two_fields` (`SteamID`,`position`)
) ENGINE=InnoDB;

谢谢你的帮助Jeroen我做了这件事而且很有效

foreach($player->children() as $lpblock) 
    {
        $position = $lpblock->attributes()->pos;
        if(!empty($position))
        {
            $sql1= "INSERT IGNORE INTO Player (playername, SteamID, position, lastlogin, approved) VALUES ('$name', '$id', '$position', '$lastlogin', '$approve')";
            if (!mysql_query($sql1,$connection))
            {
                die('Insert Error: ' . mysql_error());
            }
        }
    }
但是,我希望插入所有的SteamID,而不仅仅是设置了$position的。当我取出它并尝试时,它会添加正确的行,但也会添加另一个带有空白$position的行,就好像有一个SteamID,当没有时它是空白的

if(!empty($position)){

    }

我的代码从XML文件中提取数据,然后获取该数据并将其插入数据库。我希望它不插入重复的数据,换句话说,如果我刷新我的页面,我不希望它不断重复插入相同的数据。但是我确实想要一个副本,当且仅当position列有一个streamid的副本时。因此,如果SteamID有两个位置,它将同时插入两个。@Lordicon然后你可以像我一样对多列使用
UNIQUE
约束。这对我没有帮助,所以可能是其他原因,所以我用更多信息更新了我的原始问题。@Lordicon我的答案似乎满足数据库方面的要求,但是你需要在
lpblock
child上循环以插入不同的位置。我遇到的问题是,很多lpblock位置都是空白的,没有数据,所以它也会抓住它,不是吗?我有一些像这样的xml
@jeroen你能帮我吗?