我有一个简单的文章和 tag_map 表作为
CREATE TABLE Articles
(
ArticleID int(11) unsigned NOT NULL AUTO_INCREMENT,
Title varchar(255),
PRIMARY KEY(ArticleID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
CREATE TABLE Tags
(
TagID int(11) unsigned NOT NULL AUTO_INCREMENT,
Tag varchar(255),
UNIQUE INDEX(Tag),
PRIMARY KEY(TagID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
CREATE TABLE TagMap
(
ArticleID int(11) unsigned NOT NULL,
TagID int(11) unsigned NOT NULL,
INDEX(TagID),
PRIMARY KEY(ArticleID,TagID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
我通过 PHP 添加标签
$result = $mysqli->query("SELECT TagID FROM Tags WHERE Tag='$tag'");
if($result->num_rows == 1) {
$row = $result->fetch_assoc();
$tag_id = $row['TagID'];
}
else {
$mysqli->query("INSERT INTO Tags (Tag) VALUES ('$tag')");
$tag_id = $mysqli->insert_id;
}
$mysqli->query("INSERT INTO TagMap (ArticleID,TagID) VALUES ($article_id,$tag_id)");
我想知道是否有一种更快的方法可以在 MySQL 中的一个查询中执行此操作。
在这里,我需要 2 或 3 个查询来添加每个标签。
此外,当我们有一个标签列表时,我希望找到一种批处理方式INSERT
(可能是通过)LOAD DATA LOCAL INFILE
ArticleID,Tag
1,tag2
2,tag11
4,tag3