2015-04-14 79 views
0

我正在为3个网站的价格比较程序工作。每个网站可以与其他网站有相同的产品,但产品名称不完全相同(例如:“华硕X553MA-XX102H英特尔赛扬N2930 4GB 1TB DVDRW 15.6 Windows 8.1”和“华硕X553MA 15.6英寸英特尔赛扬4GB 1TB笔记本电脑”是一个产品,但名称不完全相同)。MySQL查询来检查这是否是相同的产品

我从3个网站抓取数据到mysql表名为crawledproduct(它有3列:sourceurl,productname,price)。

请帮我写一个MySQL查询命令,按产品名称查找所有相同的产品。

EX:Select * from crawledproduct where [Similar with 'Asus X553MA 15.6 Inch Intel Celeron 4GB 1TB Laptop']

感谢您的帮助。

回答

0

如果知道一组标准的知识总是出现在相似的产品名称中,那么可以使用like查询来获得您所需的信息。

例如,假设您例如上面,你可以得到它这样

Select name from crawledproduct 
where name like '%X553MA%' 

这会工作。注意,如果你有很多数据,这可能会导致很长的查询,所以你可能想利用MySQL的全文搜索运行速度更快。您将需要指数name为全文场,然后运行这样的查询:

SELECT name FROM crawledproduct MATCH(name) AGAINST ('X553MA') 

编辑:

注意,这两个查询的假设X553MA将出现在所有的产品名称。您必须小心如何选择搜索字词。

编辑:

如果你不知道关键字,您可以创建这将搜索所有的三个站点的形式。用户可以将关键字放入此表单中。

例如,如上所述,使用like,您可以将每个网站的信息存储在数据库中(假设您有权访问),每个信息都放在不同的表上。

和搜索,像这样:

Select tableA.name 
FROM TableA 
JOIN TableB 
    ON TableB.name = TableA.name 
JOIN TableC 
    ON TableC.name = TableA.name 
WHERE name like '%$search_term%' 

,你将有$ SEARCH_TERM来自用户。

但是,如果您希望实际抓取该网站,则SQL不是您想要的工具。

+0

感谢您的想法。但是这个表中有各种产品,我无法知道每个产品的关键字。 –

+0

不知道你在找什么,你不能用SQL来做这件事。如果您可以获取产品名称列表以及每个网站上所调用产品的列表,则可以根据产品ID在每个网站之间创建一个链接,但是您必须先自己完成所有工作以识别每个网站上的每个产品名称。 – nomistic

0

我假设产品的名称是由用户自己输入的,或者您知道要比较的产品名称。 您需要查询中的'LIKE'子句。假设您想通过单词'axus'搜索:

Select name from crawledproduct 
    where productName like '%axus%' 

%被称为通配符。它告诉DBMS你想要搜索这个模式。假设你想在每行中A列中搜索“AXUS”:

like '%axus' //This means give the rows which have entries in column A ending with axus 

like 'axus%' //This means give the rows which have entries in column A starting with axus 

like '%axus%' //This means give the rows which have entries in column A which contain the word axus. 

Ofcourse,你需要为了得到所有的产品正确输入搜索词。如果同一产品没有您指定的关键字,那么它将不会显示在您的输出中。在数据库表中搜索模式还有其他几种方法。 你可能想对此做一点研究,因为我是初学者,而且我还没有太多的知识。 祝你好运! Kudos! :)

+0

感谢您的想法。但是这个表中有各种产品,我无法知道每个产品的关键字。 –