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


How to check if column 1 has two different values for column 2

我正试图通过唯一的插入,我卡住了,我想知道的是我将如何做是使a列始终是唯一的,除非C列有两个不同的值,然后它将插入数据库的第二行,其中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')";

它按照我想要的方式插入,所以每个SteamID只有1个,但是如果相同的SteamID有两个位置值,它也不会插入。

编辑:

我所拥有的是一个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>

此时我需要为第二个<lpblock pos=

创建第二行

现在插入的是

|60|剑鱼|76561197961716203|273、93、-102|8/22/2014 10:49:28 PM|Yes|2014-08-24 15:28:16|

应该插入

|60|剑鱼|76561197961716203|273、93、-102|8/22/2014 10:49:28 PM|Yes|2014-08-24 15:28:16||61|剑鱼|76561197961716203|1322,62,-1711|8/22/2014 10:49:28 PM|Yes|2014-08-24 15:28:16|

我不确定你想要实现什么,但是你可以在列的组合上设置一个唯一的约束,在你的情况下SteamIDposition:

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集。当我把它拿出来并尝试它添加正确的行,但也添加了另一行与空白$位置,如果有一个SteamID是空的,当没有

if(!empty($position)){
    }