2012-10-31 61 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'=用戶除了我不需要包括它們以及導致結果重複的內容 –