1

ユーザーが複数のクエリで検索できるようにする方法を見つけようとしていますが、現時点では、検索スクリプトでは、データベース内のそのような単語と一致する単語が 1 つしか許可されていません。

したがって、「女性」と入力すると、すべての女性ユーザーが取得されますが、できるようにしたいのは、ユーザーが茶色の髪の女性を入力できるようにすることです。

「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();
}

?>
4

1 に答える 1

0

Use full text search

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");

Here

('$query' IN BOOLEAN MODE) AS relevance

means you get the results in order of relevance, but if you wish to order it in any other mysql ways like random() you can use:

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");

于 2013-02-03T13:09:29.777 に答える