我正在尝试创建一个脚本,在我的表行之间找到匹配的百分比.例如,表产品中的mySQL数据库包含字段名称(索引,FULLTEXT),其值为
LG 50PK350 PLASMA TV 50" Plasma TV Full HD 600Hz
LG TV 50PK350 PLASMA 50"
LG S24AW 24000 BTU
Aircondition LG S24AW 24000 BTU Inverter
Run Code Online (Sandbox Code Playgroud)
正如您可能看到他们所有人都有相同的关键字.但第一个名字和第二个名字更相似.此外,第3和第4关键字之间的关键字比第1和第2更相似.
我的mySQL DB有数千个产品名称.我想要的是找到那些具有超过百分比(比如说60%)相似性的名称.
例如,正如我所说,第一个,第二个(以及任何其他名称)在它们之间匹配超过60%,将以组样式格式回应,让我知道这些产品是相似的.第3和第4个以及任何超过60%匹配的任何其他组合将在另一组中回显,告诉我这些产品匹配.
如果可能,那么回显满足所有分组匹配名称的关键字将会很棒.例如,LG S24AW 24000 BTU是包含在第3和第4名称中的关键字.
最后,我将创建所有这些关键字的列表.
我现在有以下查询(如Jitamaro建议)
Select t1.name, t2.name From products t1, products t2
Run Code Online (Sandbox Code Playgroud)
在所有其他名称旁边创建一个新名称字段.对不起,我不知道如何解释它,但这就是它的作用:(真正的价值观是上面的产品名称)
在查询之前
-name-
A
B
C
D
E
Run Code Online (Sandbox Code Playgroud)
查询后
-name- -name-
A A
B A
C A
D A
E A
A B
B B
C B
D B
E B
.
.
.
Run Code Online (Sandbox Code Playgroud)
有没有办法用mySQL或PHP找到匹配的名称并提取关键字,如上所述?请分享代码示例.
谢谢社区.
使用LIKE OR REGEXP查询DB:
SELECT * FROM product WHERE product_name LIKE '%LG%';
SELECT * FROM product WHERE product_name REGEXP "LG";
Run Code Online (Sandbox Code Playgroud)
循环结果并使用similar_text():
$a = "LG 50PK350 PLASMA TV 50\" Plasma TV Full HD 600Hz"; // DB value
$b = "LG TV 50PK350 PLASMA 50\"" ; // USER QUERY
$i = similar_text($a, $b, $p);
echo("Matched: $i Percentage: $p%");
//outputs: Matched: 21 Percentage: 58.3333333333%
Run Code Online (Sandbox Code Playgroud)
你的第二个例子匹配62.0689655172%:
$a = "LG S24AW 24000 BTU"; // DB value
$b = "Aircondition LG S24AW 24000 BTU Inverter" ; // USER QUERY
$i = similar_text($a, $b, $p);
echo("Matched: $i Percentage: $p%");
Run Code Online (Sandbox Code Playgroud)
您可以定义高于(比如说40%)的百分比来匹配产品.
请注意,similar_text()是大小写SensitivE所以你应该小写字符串.
Jus*_*ier -1
您可以用来LIKE
在表中查找相似的产品名称。例如:
SELECT * FROM product WHERE product_name LIKE 'LG%';
Run Code Online (Sandbox Code Playgroud)