【发布时间】:2017-09-19 18:35:58
【问题描述】:
我需要将字符串(unicode 词)从 php 数组插入到 mysql 表中,但我不需要重复值 在 php 中无法检查重复项,因为单个单词来自各种来源的爆炸文本,并且某些单词可能与之前插入的相同
对于每个单词,我还需要在同一列中插入它们的 ASCII 版本,但前提是 unicode 单词与 ASCII 转换的单词不同
在 mysql 中,我有一个包含两列的“单词”表:
'id' PRIMARY 和 'word' UNIQUE (utf8mb4_general_ci)
$sql = "
INSERT INTO ´words´ (´word´) VALUES ('$word')
ON DUPLICATE KEY UPDATE
SET ´word´ = '$word'
";
$query->execute();
//ex: if $word = "peter" and $word_ascii = "peter" do not insert $word_ascii
//but if $word = "julià" and $word_ascii = "julia" inert also $word_ascii
if($word != $word_ascii){
$sql = "
INSERT INTO ´words´ (´word´) VALUES ('$word_ascii')
ON DUPLICATE KEY UPDATE
SET ´word´ = '$word_ascii'
";
$query->execute();
}
但是在这种模式下,当我尝试插入 $word_ascii = "julia" 时,它会覆盖我之前已经插入的 "julià"(由于 UNIQUE 索引和 ON DUPLICATE KEY UPDATE)
如果我退出 UNIQUE 索引,那么会有很多重复条目。
我试过了:
INSERT IGNORE(有和没有 UNIQUE),
REPLACE ...但仍然是同样的问题。
我也尝试从这个旧答案中调整 IF NOT EXIST :How to 'insert if not exists' in MySQL?
INSERT INTO ´words´ (´word´) VALUES ('$word')
WHERE NOT EXISTS (SELECT * FROM ´words´ WHERE ´word´ = '$word' LIMIT 1);
但不成功。我遇到了语法错误。
欢迎任何帮助
【问题讨论】:
-
我很困惑。你想要发生什么?
-
-
。 .
INSERT IGNORE应该做你想做的事。 -
正如我上面所说,我已经使用了 INSERT IGNORE 但我现在再试一次
-
IF NOT EXISTS出现在CREATE和DROP命令中,而不是INSERT。