我试图通过UNIQUE进行INSERT并且我遇到了问题,我想要知道的是我将如何做到这样使得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')";
它插入了我想要的方式,因此每个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 | SwordFish | 76561197961716203 | 273,93,-102 | 8/22/2014 10:49:28 PM |是| 2014-08-24 15:28:16 |
它应该插入
| 60 | SwordFish | 76561197961716203 | 273,93,-102 | 8/22/2014 10:49:28 PM |是| 2014-08-24 15:28:16 | | 61 | SwordFish | 76561197961716203 | 1322,62,-1711 | 8/22/2014 10:49:28 PM |是| 2014-08-24 15:28:16 |
答案 0 :(得分:0)
我不确定您要实现的目标,但您可以根据您的SteamID
和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;
答案 1 :(得分:0)
感谢您帮助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)){
}