Php 如何从数据库中获取相似的文本?
我有这样的代码=Php 如何从数据库中获取相似的文本?,php,database,Php,Database,我有这样的代码= <?php $sql=mysql_query("select first_name, middle_name, last_name, address, mothers_name from tabel"); while($s=mysql_fetch_array($sql)) { $firstname=$s['first_name']; $middlename=$s['middle_name']; $lastname=$s['l
<?php
$sql=mysql_query("select first_name, middle_name, last_name, address, mothers_name from tabel");
while($s=mysql_fetch_array($sql))
{
$firstname=$s['first_name'];
$middlename=$s['middle_name'];
$lastname=$s['last_name'];
$name_all= "$firstname"." $middlename"." $lastname";
similar_text($name_all, $name_all, $percent);
echo "Presentasi = $percent %";
}
?>
1 Adi Surya 63%
1 Surya Adi 63%
2 Budi Surya
我想要这样的结果=
<?php
$sql=mysql_query("select first_name, middle_name, last_name, address, mothers_name from tabel");
while($s=mysql_fetch_array($sql))
{
$firstname=$s['first_name'];
$middlename=$s['middle_name'];
$lastname=$s['last_name'];
$name_all= "$firstname"." $middlename"." $lastname";
similar_text($name_all, $name_all, $percent);
echo "Presentasi = $percent %";
}
?>
1 Adi Surya 63%
1 Surya Adi 63%
2 Budi Surya
请帮助我该怎么办?您正在将此函数中的
$name\u all
与自身进行比较:
similar_text($name_all, $name_all, $percent);
当然,比较是100%,因为$name_all等于它本身。为什么不尝试在MySQL查询中进行比较 我还没有测试过,但我认为这会有帮助:
SELECT
User.*,
COUNT(*) AS Total,
(COUNT(*) / (SELECT COUNT(*) FROM User WHERE first_name='Popular')) * 100 AS 'Percentage',
FROM
User
WHERE last_name='Popular'
GROUP BY User.first_name;
我相信这会奏效,但您可能需要根据需要编辑它。使用php代码获取百分比。试试这个
Getting percentage using php code.Try this
<?php
$sql=mysql_query("select first_name, middle_name, last_name, address, mothers_name from tabel");
$cnt=0;
while($s=mysql_fetch_array($sql))
{
$firstname=$s['first_name'];
$middlename=$s['middle_name'];
$lastname=$s['last_name'];
$name_all= "$firstname"." $middlename"." $lastname";
if(isset($arr[$name_all])){
$arr[$name_all] = $arr[$name_all]+1;
}else{
$arr[$name_all] = 1;
}
$cnt++;
}
echo $cnt;
foreach($arr as $key=>$val){
echo $key." percent=". ROUND(($val/$cnt)*100,2)."</br>";
}
?>
试试这个:
<?php
$sql=mysql_query("select first_name, middle_name, last_name, address, mothers_name from tabel");
while($s=mysql_fetch_array($sql))
{
$firstname=$s['first_name'];
$middlename=$s['middle_name'];
$lastname=$s['last_name'];
$name_all[]= "$firstname"." $middlename"." $lastname";
}
for($i=0;$i<=count($name_all)-1;$i++){
for($j=$i+1;$j<=count($name_all)-1;$j++){
$result[]=checkforsimilarity($name_all[$i],$name_all[$j]);
}
}
echo "<pre>";
die(print_r($result));
function checkforsimilarity($a,$b){
if($a!=$b){
similar_text($a,$b,$percent);
return "<br />percentage of similarity between $a and $b is $percent <br />";
}
}
?>
在上面的代码中,您想做什么?在类似文本中($name\u all,$name\u all,$percent)代码>您两次都在传递name\u?是预期的吗?您正在比较$name_all和$name_all,您期望得到什么???我的意思是如何在数据库中获得类似的文本?您应该尝试一下。它使很多事情比mysql(顺便说一句)容易得多。我不知道如何比较数据库中的下一条记录?名字总是变化,不仅仅是“流行”,可以是“margareth”,也可以是“john”。我仍然没有得到它,所以只传递User.first\u name而不是Popular.我的意思是使用self-join,为表指定不同的名称,并将其传递给where条件。我没有得到它,我有5条数据库记录,应该是每1条记录匹配一条记录,应该是25条记录。请帮帮我?