避免在mysql关系表中重复

时间:2014-02-28 05:55:09

标签: php mysql

我有一个看起来像这样的表:

CREATE TABLE `relations` (
   `idA` VARCHAR(20),
   `idB` VARCHAR(20).
   PRIMARY KEY (idA,idB)
)
TYPE=MyISAM;

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

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

我有可能完全错误地使用它吗?有更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试

吗?
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')
                   )

答案 1 :(得分:0)

所以 - 我拿了Akhils代码并对其进行了修改,所以很热它的工作原理:

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

谢谢大家! :)