我有一个字典术语表,现在我想创建另一个表格,其中包含“主要”术语的ID以及在其定义中包含“主要”术语名称的相关术语的ID -
table: terms
| id | name | definition |
Table: related
| term_id | related_term_id |
在PHP中创建INSERT语句非常简单:
$result = mysql_query("SELECT * FROM terms");
while ($row = mysql_fetch_array($result)) {
$name = $row['name'];
$result2 = mysql_query("SELECT id,name FROM terms WHERE description LIKE \"%$name%\" AND id!=".$row['id']);
while ($row2 = mysql_fetch_array($result2)) {
echo "INSERT INTO related(term_id,related_term_id) VALUES(".$row['id'].",".$row2['id'].");";
}
}
但是,由于我没有太多使用MySQL的经验,我想知道是否可以纯粹在SQL中完成 - 假设使用INSERT-SELECT语句?
谢谢!
答案 0 :(得分:2)
INSERT INTO related (term_id, related_term_id)
SELECT a.id as term_id, b.id AS related_term_id
FROM terms a, terms b
WHERE a.id != b.id
AND b.description LIKE CONCAT('%', b.name, '%')
答案 1 :(得分:0)
如果terms
表很大(超过1000-10000行),那将会非常慢:
INSERT INTO related (term_id, related_term_id)
SELECT describing.id, described.id
FROM terms describing
JOIN terms described
ON CONCAT(' ', described.description, ' ') LIKE CONCAT('% ', describing.name, ' %')
假设所有描述都有空格分隔单词而没有其他标记,例如,
或?
或!
或.
如果不是这样,则代码会更复杂
答案 2 :(得分:-1)
更改您的INSERT
查询:
echo "INSERT INTO related(term_id,related_term_id) VALUES('". $row['id'] ."','". $row2['id'] ."');";