Php mysql选择相关术语
我有一个字典术语表,现在我想创建另一个表,其中包含“主要”术语的ID以及定义中包含“主要”术语名称的相关术语的ID-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
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在他的脚本中所做的。