簡體   English   中英

在Mysql php中一次搜索多個單詞

[英]Search multiple words at a time in a row in Mysql php

我是Mysql Php的初學者。 我想做一個搜索框,它可以找到包含在mysql中搜索表的多個單詞的行。 我有一個通過互聯網的腳本,如下所示。 當我鍵入多個單詞時,它將顯示具有最少搜索單詞的行。 但我希望它僅顯示搜索多個單詞的行。 請幫我。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang='en'>
<head>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=UTF-8'/>
<title>Page title</title>
<style type="text/css">
table {
border-collapse: collapse;
border: solid 1px black;
}
td {
padding: 2px 6px;
border: solid 1px black;
}
</style>
</head>
<body>
<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
<p>Search for: <input type='text' name='search' size='20'
maxlength='64'></p>
<p><input type='submit' value='Search'></p>
</form>
<?php
if(isset($_POST['search']))
{
$connx = mysql_connect('localhost', '*****', '*****') or
die("connx");
$db = mysql_select_db('test') or die(mysql_error());
# convert to upper case, trim it, and replace spaces with "|":
$search = (ini_get('magic_quotes_gpc')) ?
stripslashes($_POST['search']) :
$_POST['search'];
$search = mysql_real_escape_string($search);
$search = strtoupper(preg_replace('/\s+/', '|',
trim($_POST['search'])));
# create a MySQL REGEXP for the search:
$regexp = "REGEXP '[[:<:]]($search)[[:>:]]'";
$query = "SELECT * FROM `users` WHERE UPPER(`description`) $regexp
OR ".
"`name` $regexp";
$result = mysql_query($query) or die($query . " - " .
mysql_error());
echo "<table>\n";
while($row = mysql_fetch_assoc($result))
{
echo "<tr>";
foreach($row as $key => $value)
{
echo "<td>$value</td>";
}
echo "</tr>\n";
}
}
?>
</body>
</html>

這是一個選擇:

$search = explode(" ", $_POST['search']);
$description = "";
$name = "";
foreach($search AS $s)
{
    $description .= "`description` LIKE '%".mysql_real_escape_string($s)."%' AND ";
    $name .= "`name` LIKE '%".mysql_real_escape_string($s)."%' AND ";
}

$description = substr($description, 0, -4);
$name = substr($name, 0, -4);

$query = "SELECT * FROM `users` WHERE ($description) OR ($name)";

如果您的搜索字詞類似於“約翰醫生”,則查詢將如下所示:

SELECT * FROM `users` WHERE (`description` LIKE '%Doctor%' AND `description` LIKE '%John%') OR (`name` LIKE '%Doctor%' AND `name` LIKE '%John%')

顯然,這兩個詞都成為了描述或名稱字段中的一個要求。 這就像您要找的東西嗎?

PS-查看PHP的PDO庫 mysql_函數太舊了,無法再視為標准函數了。 它們會起作用,但是您應該升級。

我不確定您要說的是什么,但是我想您想要的是:

$words = explode(" ", $_POST["search"]);
$sql = "SELECT * FROM `users` WHERE ";
$where = array();
foreach ($words as $word) {
    $where[] = "UPPER(`description`) LIKE '%".mysql_real_escape_string($word)."%'";
}
$sql .= implode(" OR ", $where);
$result = mysql_query($sql);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM