Php 避免mysql关系表中的重复项

Php 避免mysql关系表中的重复项,php,mysql,Php,Mysql,我有一张这样的桌子: CREATE TABLE `relations` ( `idA` VARCHAR(20), `idB` VARCHAR(20). PRIMARY KEY (idA,idB) ) TYPE=MyISAM; CREATE TABLE `scores` ( `id` VARCHAR(20) PRIMARY KEY, `score` INT(10) UNSIGNED NOT NULL DEFAULT ‘0’, `friendsids` VARC

我有一张这样的桌子:

CREATE TABLE `relations` (
   `idA` VARCHAR(20),
   `idB` VARCHAR(20).
   PRIMARY KEY (idA,idB)
)
TYPE=MyISAM;
CREATE TABLE `scores` (
   `id` VARCHAR(20) PRIMARY KEY,
   `score` INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
   `friendsids` VARCHAR(1000)

)
TYPE=MyISAM;
它基本上只是将两个ID从另一个表映射到一起,如下所示:

CREATE TABLE `relations` (
   `idA` VARCHAR(20),
   `idB` VARCHAR(20).
   PRIMARY KEY (idA,idB)
)
TYPE=MyISAM;
CREATE TABLE `scores` (
   `id` VARCHAR(20) PRIMARY KEY,
   `score` INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
   `friendsids` VARCHAR(1000)

)
TYPE=MyISAM;
因此,如果我想向关系表中添加一些内容,我会查询

INSERT IGNORE INTO relations VALUES ('$idA', '$idB')
所以问题是,它有时会创建具有相同信息但在idA和idB之间交换的条目。例如,如果一个条目是idA=1,idB=2,那么我不想要一个看起来像idA=2,idB=1的条目

我试过:

INSERT IGNORE INTO relations VALUES ('$idA', '$idB') WHERE NOT EXISTS (SELECT * WHERE idA IS '$idB' AND idB IS '$idA');
它给了我一个语法错误,我不知怎么搞不明白:

Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE INTO relations VALUES ('saubua', 'deppata') WHERE NOT EXISTS (SELECT * WH' at line 1
有没有可能我完全错了?有更简单的方法吗?

你能试试吗

INSERT INTO relations
SELECT '$idA','$idB'
FROM   dual
WHERE  NOT EXISTS (SELECT idA
                   FROM   relations
                    WHERE (idA='$idA' OR idB='$idB')
                    OR (idA='$idB' OR idB='$idA')
                   )

所以-我拿了Akhils的代码并将其mofied,所以它不起作用:

INSERT IGNORE INTO relations SELECT '$idA','$idB' FROM dual WHERE NOT EXISTS (SELECT idA FROM relations WHERE (idA='$idB' AND idB='$idA') )

谢谢大家!!:

您能告诉我们您得到的实际错误吗?您必须在where子句中指定列名,并在before秒中使用select@TaryEast:刚刚编辑了文章,底部有错误,我会删除1-2,2-1,然后insert@krishna:idaA是列名,$idA是带有我要添加的id的字符串。你说的second SELECT是什么意思?只有一个?我试过了,但它没有添加任何内容,除非idB与idA相同,意味着与自身的连接。什么是双重的?那是另一个数据库吗?我试着用关系来代替它。事实上,我成功了!我对它做了一点修改,使其看起来像这样:在关系中插入IGNORE选择“$idA”,从不存在的分数中选择“$idB”,从idA=“$idB”和idB=“$idA”的关系中选择idA,非常感谢Akhil!很好的工作伙伴,你为什么不把它作为一个答案贴出来呢