Php mysql选择相关术语

Php mysql选择相关术语,php,mysql,Php,Mysql,我有一个字典术语表,现在我想创建另一个表,其中包含“主要”术语的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($r

我有一个字典术语表,现在我想创建另一个表,其中包含“主要”术语的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语句


谢谢

如果
terms
表很大(超过1000-10000行),那么速度会非常慢:

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, '%')

假设所有描述都有空格分隔单词,没有其他标记,如
如果不是这样,代码将更加复杂。

如果
术语表很大(超过1000-10000行),代码将非常慢:


假设所有描述都有空格分隔单词,没有其他标记,如
如果不是这样,代码将更加复杂。

更改
插入查询:

echo "INSERT INTO related(term_id,related_term_id) VALUES('". $row['id'] ."','". $row2['id'] ."');";

更改您的
插入
查询:

echo "INSERT INTO related(term_id,related_term_id) VALUES('". $row['id'] ."','". $row2['id'] ."');";

这还将添加
by
in
LA
中描述为
迷宫的任何术语的id。它没有检查整个单词,我的观点是。我不明白为什么
a.id!=b、 必须添加id
。一个术语可以在它的描述中有它自己。这是正确的,但是OP在他的脚本中也是这样做的。这也会在
中添加
的id,在
中添加
,在
中添加
,在任何描述中包含
迷宫
的术语中添加
的id。它没有检查整个单词,我的观点是。我不明白为什么
a.id!=b、 必须添加id
。一个术语可以有它自己的描述。这是真的,但这也是OP在他的脚本中所做的。