Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

不言
不言Original
2018-08-18 17:34:3416685Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Implementierung von Fuzzy-Abfragen (Grafik- und Textcode) in PHP. Ich hoffe, dass er für Freunde hilfreich ist.

Einführung

  • Im Wesentlichen aufschlussreiche PHP-Fuzzy-Query-Technologie

Funktion

  • Finden Sie relevante Benutzer basierend auf den eingegebenen Schlüsselwörtern

PHP User Queryer Case AnalysisSo implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

Kursziele

  • Meistern Sie die Anwendung der PHP-Fuzzy-Technologie

Wichtige Punkte des Kurses

  • Die Syntax der PHP-Fuzzy-Abfrage

  • Anwendung der PHP-Fuzzy-Abfrage

Kursfall (Rendering)

So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)
So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)Datenbankdesign

Benutzertabelle ( Benutzer):

CREATE TABLE user(    
`uid` int(10) AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',    
`username` varchar(30) NOT NULL DEFAULT '' COMMENT '用户名',    
`password` varchar(6) NOT NULL DEFAULT '' COMMENT '密码',    
`sex` char(2) NOT NULL DEFAULT '保密' COMMENT '性别',    
`email` varchar(40) NOT NULL DEFAULT '' COMMENT '邮箱',    
`hobby` varchar(255) NOT NULL DEFAULT '' COMMENT '兴趣爱好',    
KEY `username`(`username`)//索引
)ENGINE=MyISAM DEFAULT CHARSET=UTF8 COMMENT='用户表'

Vorteile der Indizierung:
Wenn Sie Daten gemäß einer bestimmten Bedingung abrufen und das Bedingungsfeld nicht indiziert ist, wird bei der Abfrage die gesamte Tabelle durchlaufen. Wenn Sie einen Index erstellen, basiert die Abfrage auf dem Index, wodurch die Abfrageleistung verbessert wird

Mysql-Fuzzy-Abfragesyntax

  • SQL-Abgleichsmodus (der in der Entwicklung am häufigsten verwendete)

  • Muster für den Abgleich regulärer Ausdrücke

SQL-Übereinstimmungsmuster
  • Sie können den Operator = oder != nicht verwenden, sondern den Operator LIKE oder NOT LIKE

  • verwendet den SQL-Matching-Modus. MYSQL bietet zwei Platzhalterzeichen:
    ①% steht für eine beliebige Anzahl beliebiger Zeichen (einschließlich 0)
    ②_ Jedes durch

  • dargestellte einzelne Zeichen verwendet den SQL-Übereinstimmungsmodus. Wenn das Übereinstimmungsformat keines der beiden oben genannten Platzhalterzeichen enthält, entspricht der Abfrageeffekt = oder !=

  • SQL-Abgleichsmuster verwenden, Groß- und Kleinschreibung standardmäßig nicht berücksichtigen

代码实现:
SELECT * FROM user WHERE username like 'l%';
SELECT * FROM user WHERE username like '%e';
SELECT * FROM user WHERE username like '%o%';
SELECT * FROM user WHERE username like '___';//三个_,表示username为三个字符的结果集
SELECT * FROM user WHERE username like '_o%';//第二个字符为o
Abgleichsmuster für reguläre Ausdrücke
  • . entspricht jedem einzelnen Zeichen

  • * entspricht 0 oder mehr Zeichen davor

eg:x* 表示匹配任何数量的x字符
  • [] entspricht jedem Zeichen in Klammern

eg:[abc] 匹配字符a、b后者c
   [a-z] 匹配任何字母   
   [0-9] 匹配任何数字   
   [0-9]* 匹配任何数量的任何数字   
   [a-z]* 匹配任何数量的任何字母
  • ^ bedeutet, dass es mit einem bestimmten Zeichen oder einer bestimmten Zeichenfolge beginnt

eg:^a 表示以字母a开头
  • $ stellt ein bestimmtes Zeichen- oder Zeichenfolgenergebnis dar

eg:s$ 表示以字母s结尾
  • Verwenden Sie reguläre Ausdrücke. Operatoren, die in Vergleichsmustern verwendet werden: REGEXP(RLIKE) oder NOT REGEXP(NOT RLIKE)

code:SELECT * FROM user WHERE username REGEXP '^l';
SELECT * FROM user WHERE username REGEXP '...';

PS: Wenn Sie nur das Platzhalterzeichen . verwenden, gibt es mehrere Punkt-Platzhalterzeichen, vorausgesetzt, N , dann stellt das passende Muster größer als dar oder gleich N
So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

  • genaue Anzahl von Zeichen

^...$          //表示只能为三个字符
SELECT * FROM user WHERE username REGEXP '^...$';

So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

Fall

Entwicklungsprozess

So implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode)

Quellcode-Analyse

<?php
//关键字
$keywords = isset($_POST[&#39;keywords&#39;])?$_POST[&#39;keywords&#39;]:&#39;&#39;;
//连接数据库,php7废弃了mysql_connect推荐使用
mysqli_connect$link = mysqli_connect(    "localhost:3306",    "root",    "root",    "mook");
if(!empty($keywords)){    
$sql = "SELECT * FROM user WHERE username like &#39;%{$keywords}%&#39; ";
}else{    
$sql = "SELECT * FROM user";
}$usersArr = [];$result = $link->query($sql);while($row = $result->fetch_assoc())
{    //简单高亮显示
    // $row[&#39;username&#39;] = str_replace($keywords, "<font color=&#39;red&#39;>".$keywords."</font>",$row[&#39;username&#39;]);
    //高亮显示,不区分关键字的大小写
    $usernameArr = preg_split(&#39;/(?<!^)(?!$)/u&#39;,$row[&#39;username&#39;]);    
    foreach ($usernameArr as $key => $value) {        
    if(strtoupper($keywords) == strtoupper($value)){            
    $usernameArr[$key] = "<font color=&#39;red&#39;>".$value."</font>";
        }
    }    
    $row[&#39;username&#39;] = join($usernameArr);    
    $usersArr[] = $row;
}?><!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>php用户查询器</title>
</head>
<body>
    <h1>php模糊查询</h1>
    <form action="index.php" method="post">
        用户名:<input type="text" name="keywords" value="" />
        <input type="submit" value="提交查询" />
    </form>    
    <?php
        if(!empty($keywords)){            
        echo "查询关键词:<font color=&#39;red&#39;> ".$keywords." </font>结果!";
        }        
        $tableString = "<table width=&#39;500&#39; border=&#39;1&#39; cellpadding=&#39;5&#39;>";        
        $tableString .= "<tr bgcolor=&#39;orange&#39;><th>用户名</th><th>邮箱</th><th>性别</th></tr>";        
        if(!empty($usersArr)){           
         foreach ($usersArr as $key => $value) {                
        $tableString .= "<tr><td>" . $value[&#39;username&#39;]. "</td><td>" . $value[&#39;email&#39;] . "</td><td>".$value[&#39;sex&#39;]."</td></tr>";
            }
        }else{           
         $tableString .="<tr><td colspan=&#39;3&#39;>没有数据</td></tr>";
        }        
        $tableString .= "</table>";        
        echo $tableString;    
        ?>
        </body>
</html>

Quellcode-Download-Adresse:

Link :https: //pan.baidu.com/s/1F8duu8G2iCa4xgNLBbiLCg Passwort: 96fn

Verwandte Empfehlungen:

PHP-Codebeispiel, um zu erkennen, dass Mitgliedskonten nur eindeutig angemeldet werden können

PHP-Codebeispiel, um zu erkennen, dass ein Mitgliedskonto nur als Einziger angemeldet sein kann

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Fuzzy-Abfragen in PHP (Grafikcode). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

In Verbindung stehende Artikel

Mehr sehen