2012-10-31 139 views
2

我有从mysql查询运行的搜索脚本。如果它们的display_name或location与查询类似,它将从数据库中提取匹配的用户。当我执行搜索的用户显示的名字,我得到的只是一个结果,像这样每个用户:限制mysql查询为1结果?

搜索“汤姆” = 2个结果汤姆= 1.tom戴维斯和史密斯2.tom。

无论出于何种原因,如果我的搜索位置即曼彻斯特它复制了成效,例如每个用户:

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

是否有人可以解释我是如何从这样停止它。我只希望它为符合搜索查询的每个用户调出一个结果,而不是多次显示同一用户。我敢肯定,这是与从ptb_users和ptb_profiles选择全部,但我需要的“帐户类型”和“ACCOUNT_STATUS”被列入这是在ptb_users。

感谢

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

?> 
+1

您需要提供数据库表结构的信息... –

+0

为什么这样的:'ptb_users.account_type = \“用户\”'...为什么,为什么?为什么不'ptb_users.account_type ='User''?我的哦,我... – CodeAngry

回答

0

什么查询......基本上你可以使用由...

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

组不同或GROUP BY:http://www.tizag.com/mysqlTutorial/mysqlgroupby.php

鲜明:http://www.w3schools.com/sql/sql_distinct.asp

你也可以例如,使用LIMIT来限制通过添加LIMIT 10返回的行数到查询结束将只允许返回最多10行。

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" 
+0

感谢,但我不知道我已经解释自己正确,说有面积回合曼彻斯特12个用户,用户将要搜索的曼彻斯特,看看谁是在他们的地区,并希望所有12个用户展示但我的问题是,而不是12个用户来这12个用户出现了几次,所以亚当被重复5次,然后下一个用户重复5次等 –

+0

在这种情况下,使用GROUP BY ptb_users.id第 –

+0

谢谢,我做到了,我只是用group by子句像你说:GROUP BY ptb_profiles.id –

0

看起来你应该加入ptb_users和ptb_profiles?例如

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 
+0

啊基本上我只是想SELECT * FROM ptb_profiles我需要包括ptb_users的唯一原因是因为这告诉搜索只显示活动“account_status”=活动的用户。和'account_type'=用户除了我不需要包括它们以及导致结果重复的内容 –