从同一个表中查找类似的数据

时间:2013-03-06 11:49:54

标签: mysql database html-table

我有一个表包含两个这样的列。 (项目名称和项目描述)

item_name    item_des

jasmine      beautiful flower & nice smell    
rose         flower
orange       gud fruit
apple        fruit
books        books

我希望根据项目名称&amp ;;找到此表中的匹配项目。描述即, 例如,结果应该是:

item_name    item_des

jasmine      beautiful flower & nice smell    
rose         flower

item_name    item_des

orange       gud fruit
apple        fruit

我怎样才能在sql中做到这一点?

我没有任何项目名称或描述。我只想获得具有相似项目名称或类似描述的表格的所有内容。

3 个答案:

答案 0 :(得分:1)

在阅读了对其他答案的评论后,我得出结论,你想要的是从表中获取行集,并希望每个集在item_des列中具有相似的值。至少那是你的例子所呈现的。

问题在于你定义'相似'的方式。据我所知,您不希望为查询提供任何其他数据来定义您正在寻找的相似性。 AshReva和Naryl假设你这样做。这就是他们建议您在查询中使用LIKE '%flower%' or LIKE 'fruit'的原因。

我想你要求的是如何获得列表('fruit', 'flower', ...),因为你没有列表token fruit books beautiful flower & nice smell gud fruit flower 。您需要一个可以找到一个查询的查询。

这不是一件容易的事,它需要你做出一些决策。任务相当复杂,因此我不打算提供准备好运行的解决方案。我将介绍一些你需要做的相当简单的步骤。

首先,您需要对item_des字段进行标记。你想要的是另一个名为t的表,其中包含一个字段,例如称为令牌。在对您的示例进行标记后,您应该获得如下表格:

distinct

您可能必须编写自己的标记化功能。点击这里: Is there something analogous to a split() method in mySql?

然后删除重复项(在列上执行select item_name, item_des, token from input_data, t where item_des like concat('%',t.token,'%') order by token )。所以你得到:     代币     水果     图书     美丽     花     &安培;     不错     闻     GUD

然后你可能想以某种方式删除无效的令牌。您可以手动执行此操作。您可以针对某些关键字或字典进行自动匹配。您可以应用一些启发式方法,例如删除长度为1个字符的标记。

之后你只需在两个表之间进行匹配,原始表(假设它被称为input_data)和最终表t,其中包含你的标记:

item_name    item_des                         token
jasmine      beautiful flower & nice smell    beautiful
jasmine      beautiful flower & nice smell    &
jasmine      beautiful flower & nice smell    nice
jasmine      beautiful flower & nice smell    smell
rose         flower                           flower
jasmine      beautiful flower & nice smell    flower
orange       gud fruit                        gud
orange       gud fruit                        fruit
apple        fruit                            fruit
books        books                            books

然后你应该得到类似的东西:

{{1}}

我希望这就是你所需要的。

答案 1 :(得分:-2)

请尝试以下代码:

select * from table_name where item_name like '%flower%' or item_des like '%flower%'

答案 2 :(得分:-3)

可以通过以下方式完成:

SELECT * FROM item WHERE item_des LIKE '%flower%'