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"."&nbsp;$middlename"."&nbsp;$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"."&nbsp;$middlename"."&nbsp;$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"."&nbsp;$middlename"."&nbsp;$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"."&nbsp;$middlename"."&nbsp;$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条记录。请帮帮我?