mysql选择相关术语

时间:2011-07-25 10:48:24

标签: 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($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语句?

谢谢!

3 个答案:

答案 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'] ."');";