将mysql查询限制为1个结果?

时间:2012-10-31 19:20:48

标签: php mysql search

我有从mysql查询运行的搜索脚本。如果匹配用户的display_name或位置与查询类似,则会从数据库中提取匹配用户。当我搜索用户显示名称时,每个用户只得到一个结果,如下所示:

搜索'Tom'= 2的结果为tom = 1.tom davies和2.tom smith。

无论出于何种原因,如果我搜索位置,即manchester,它会复制每个用户的结果,如:

汤姆戴维斯 汤姆戴维斯 汤姆戴维斯 汤姆戴维斯 汤姆史密斯 汤姆史密斯 汤姆史密斯 汤姆史密斯

有人可以解释我如何阻止它这样做。我只希望它为每个匹配搜索查询的用户提供一个结果,而不是多次显示同一个用户。我确定它与ptb_users和ptb_profiles中的select all有关,但是我需要包含在ptb_users中的'account type'和'account_status'。

谢谢

              

<?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="database";
$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_users, ptb_profiles
                        WHERE ptb_users.account_type = \"User\" AND ptb_users.account_status = \"Active\" AND ptb_profiles.user_id = ptb_users.id AND display_name like '%".$query."%' 
        OR location LIKE '%".$query."%' OR age LIKE '%".$query."%'");
echo "<div class=\"results\">";
while($data_fetch=mysql_fetch_array($query_for_result))
{
    echo "<div class=\"spacing\"><a href=\"profile.php?id={$data_fetch['user_id']}\">";
    echo substr($data_fetch[$db_tb_atr_name], 0,160);
    echo "</a></div>";

}


mysql_close();
}

?>

3 个答案:

答案 0 :(得分:3)

使用LIMIT条款

"SELECT * FROM ptb_users, ptb_profiles
WHERE ptb_users.account_type = \"User\" AND ptb_users.account_status = \"Active\" AND 
ptb_profiles.user_id = ptb_users.id AND display_name like '%".$query."%' 
        OR location LIKE '%".$query."%' OR age LIKE '%".$query."%' LIMIT 1"

答案 1 :(得分:0)

看起来你应该加入ptb_users和ptb_profiles? e.g。

SELECT * 
FROM ptb_users AS u
INNER JOIN ptb_profiles AS p ON u.id = p.user_id
WHERE u.account_type = \"User\"
    AND u.account_status = \"Active\"
    AND u.display_name like '%".$query."%' 
    OR p.location LIKE '%".$query."%'
    OR u.age LIKE '%".$query."%'
GROUP BY u.display_name

答案 2 :(得分:0)

什么是查询...基本上你可以使用distinct或group by ...

"SELECT * FROM ptb_users, ptb_profiles WHERE ptb_users.account_type = \"User\" 
AND ptb_users.account_status = \"Active\" AND ptb_profiles.user_id = ptb_users.id 
AND display_name like '%".$query."%' OR location LIKE '%".$query."%' 
OR age LIKE '%".$query."%' GROUP BY display_name"

分组依据:http://www.tizag.com/mysqlTutorial/mysqlgroupby.php

区别:http://www.w3schools.com/sql/sql_distinct.asp

您还可以使用LIMIT来限制通过添加LIMIT 10返回的行数,例如,在查询结束时,只允许返回最多10行。