我有一个带有文章(article_id,keyword)db表的mysql数据库,其中keywords是以逗号分隔的列表。我创建了两个新的空表:
关键字(keyword_id,keyword)其中每行只有一个关键字。
article_key (article_id,keyword_id)其中每行只有一个关键字。
因此,我希望从文章到关键字之间存在多对多的关系。我想创建一个简短的脚本来从原始的文章表中提取id和关键字,拆分关键字并适当地填充两个新表。我认为这很容易,但事实证明比我想象的要复杂一点。
非常感谢任何帮助。
答案 0 :(得分:1)
在伪代码中:
$keywords = "kw1,kw2,kw3,...";
foreach(explode(',', $keywords) as $kw) {
INSERT IGNORE keywords (keyword) VALUES ('$kw')
$id = mysql_insert_id();
INSERT INTO article_key (article_id, keyword) VALUES ($aID, $id)
}
答案 1 :(得分:0)
不太确定您的问题是什么,我假设您article_key
表示keyword_id
而不是keyword
获取文章的关键字(给定article_id):
SELECT keywords.keyword
FROM keywords
INNER JOIN article_key ON keywords.keyword_id = article_key.keyword_id
WHERE article_id = ?
要获取与关键字相关联的文章(给定keyword_id):
SELECT article_id
FROM article_keys
INNER JOIN keywords ON keywords.keyword_id = article_key.keyword_id
WHERE keyword = ?
修改强>
错过了你的实际问题,只是看到了它。 Marc B的回答如下:
答案 2 :(得分:0)
你可以做类似的事情:
//Get articles with keywords:
$result = mysql_query("SELECT article_id, keyword FROM article");
//Cycle through all articles
while ($article = mysql_fetch_assoc($result)) {
$article_id = $article['article_id'];
$keywords = $article['keyword'];
//Explode keywords on seperator (; in this case)
$keyword_array = explode(";", $keywords);
//For each keyword get the corresponding ID
for ($i = 0; $i < count($keyword_array); i++) {
$result2 = mysql_query("SELECT keyword_id FROM keywords WHERE keyword = '" . $keyword_array[$i] . "'");
//Get keyword_id
$row = mysql_fetch_assoc($result2);
$keyword_id = $row['keyword_id'];
//Insert new key
mysql_query("INSERT INTO article_key VALUES (" . $article_id . ", " . $keyword_id . ")");
}
}
在此脚本(未经测试)中,我假设您已经在关键字表中填充了关键字,并且文章表中包含逗号分隔的关键字和不 ID。