我正试图通过唯一的插入,我卡住了,我想知道的是我将如何做是使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|
我不确定你想要实现什么,但是你可以在列的组合上设置一个唯一的约束,在你的情况下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;
谢谢你的帮助,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)){
}