php - 添加多个搜索查询到搜索脚本?

标签 php mysql

我正在尝试找出一种允许用户通过多个查询进行搜索的方法,目前我的搜索脚本只允许一个真正的 like for like 匹配词与数据库中的 like that 相匹配。

因此,如果我输入女性,我会得到所有女性用户,但我希望能够做的是允许用户输入棕色头发的女性。

'haired' 不是查询,也没有存储在数据库中,但仍然允许搜索显示 query = 'brown' 和 query = 'women'。

我尝试简单地将 OR like '%".query."%' 替换为 AND 但这意味着如果用户只搜索女性,则不会显示任何内容,因为它要求包含所有查询。

任何人都可以告诉我如何做到这一点我真的很挣扎吗?

谢谢。

<?php
//PHP CODE STARTS HERE

if(isset($_GET['submit'])){

// Change the fields below as per the requirements
$db_host="localhost";
$db_username="root";
$db_password="";
$db_name="";
$db_tb_atr_name="display_name";

//Now we are going to write a script that will do search task
// leave the below fields as it is except while loop, which will display results on screen

mysql_connect("$db_host","$db_username","$db_password");
mysql_select_db("$db_name");

$query=mysql_real_escape_string($_GET['query']);


$query_for_result=mysql_query("SELECT * 
                        FROM ptb_stats
                        WHERE display_name like '%".$query."%' OR location LIKE '%".$query."%' OR sex LIKE '%".$query."%' OR nationality LIKE '%".$query."%' OR ethnicity LIKE '%".$query."%' OR age LIKE '%".$query."%' OR local_station LIKE '%".$query."%' OR height LIKE '%".$query."%' OR weight LIKE '%".$query."%' OR status LIKE '%".$query."%' OR build LIKE '%".$query."%' LIMIT 5");
echo "<div class=\"search-results\">";
while($data_fetch=mysql_fetch_array($query_for_result))

{

    echo "<div class=\"text\"><a href=\"profile.php?id={$data_fetch['user_id']}\" class=\"search\">";
    echo "<div class=\"spacing\"><img width=35px height= 30px src=\"data/photos/{$data_fetch['user_id']}/_default.jpg\" class=\"boxgridsearch\"/> "; 
     echo substr($data_fetch[$db_tb_atr_name], 0,160);
    echo "</a></div></div>";

}
echo "<div class=\"morebutton-search\"><a href=\"search_results.php?query=$query\">+ view more results</a></div>";



mysql_close();
}

?>

最佳答案

使用全文搜索

mysql_query("SELECT *,MATCH(display_name, location, sex, nationality, ethnicity, age, local_station, height, weight, status, build) AGAINST ('$query' IN BOOLEAN MODE) AS relevance FROM ptb_stats WHERE MATCH(display_name, location, sex, nationality, ethnicity, age, local_station, height, weight, status, build) AGAINST('$query' IN BOOLEAN MODE) ORDER BY relevance DESC LIMIT 5");/p>

这里

('$query' IN BOOLEAN MODE) AS relevance

意味着您按照相关性顺序获得结果,但是如果您希望以任何其他 mysql 方式(如 random())对其进行排序,您可以使用:

mysql_query("SELECT * FROM ptb_stats WHERE MATCH(display_name, location, sex, nationality, ethnicity, age, local_station, height, weight, status, build) AGAINST('$query' IN BOOLEAN MODE) order by random() DESC LIMIT 5");

关于php - 添加多个搜索查询到搜索脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672605/

相关文章:

php - 在第 n 次迭代中显示图像 php

php - 更新数据库中的所有表

mysql - 获取重复的sql结果

python - 当前交易发生错误。在 'atomic' block 结束之前不能执行查询

mysql - 如何使用when方法在查询中插入select和join方法?

php - 我有md5加密的密码,当他使用 "Forgot password"时如何将密码提供给用户?

php - 了解 Zend Framework Bootstrap 进程和从 application.ini 加载资源

MySQL 为每个有效用户循环一行

php - 选择计数 php/sql

php - PHP 数组的笛卡尔积