2012-10-31 6 views
2

mysql 쿼리에서 실행되는 검색 스크립트가 있습니다. display_name 또는 location이 쿼리와 비슷한 경우 일치하는 사용자를 데이터베이스에서 가져옵니다. 사용자 표시 이름에 대한 검색을 수행 할 때마다 다음과 같이 각 사용자에 대해 하나의 결과 만 얻습니다.mysql 쿼리를 1로 제한 하시겠습니까?

톰 = 1.tom davies 및 2.tom smith에 대해 2 개의 결과가 검색됩니다. 나는 그것이 같은 각 사용자에 대한 결과를 중복 위치 즉, 맨체스터를 검색 할 경우 어떤 이유로

:

톰 톰 톰 톰 데이비스 데이비스 을 데이비스 데이비스 톰 스미스 톰 스미스 톰 스미스 톰 스미스

누군가 내가이 작업을 중단하는 방법을 설명해 주실 수 있습니까? 검색 쿼리와 일치하는 각 사용자에 대해 동일한 사용자를 여러 번 표시하는 대신 하나의 결과 만 표시하도록합니다. 나는 ptb_users와 ptb_profiles에서 모두 select로 할 수 있다고 확신하지만 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(); 
} 

?> 
+1

데이터베이스 테이블의 구조에 대한 정보를 제공해야합니다 ... –

+0

왜이 :'ptb_users.account_type = \ "사용자 \"'... 왜 왜? 왜이'ptb_users.account_type = '사용자'? 내 오 마이 ... – 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" 

그룹 별개의 또는 그룹 사용할 수 있습니다 http://www.w3schools.com/sql/sql_distinct.asp

을 당신은 또한 수 LIMIT를 사용하여 리턴 된 행의 수를 제한하십시오. 예를 들어 조회의 끝에 LIMIT 10을 추가하면 최대 10 개의 행만 리턴 될 수 있습니다.

3

사용하면 ptb_users 및 ptb_profiles에 가입해야처럼

"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

고마워요.하지만 제대로 설명했는지 모르겠군요. manchester에 12 명의 사용자가 있습니다. 사용자는 자신의 지역에 누가 있는지보기 위해 manchester를 검색하고 12 명의 사용자 모두에게 보여주고 싶습니다. 하지만 내 문제는 12 명의 사용자가 12 명이 오지 않고 12 명이 나타나기 때문에 아담은 5 번 반복되고 다음 사용자는 5 번 반복됩니다. –

+0

은 GROUP BY ptb_users.id를 사용합니다 절 –

+0

덕분에, 난 그냥 같은 U 조항에 의해 그룹을 사용했다 : GROUP BY ptb_profiles.id –

0

이 보이는 한계 절? 예 : http://www.tizag.com/mysqlTutorial/mysqlgroupby.php

고유 :

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

근데 기본적으로 ptb_profiles를 선택하고 싶습니다. 단지 ptb_users를 포함시킬 필요가있는 유일한 이유는 검색 만하기 때문입니다. 활성화 된 'account_status'= 활성 사용자를 표시하십시오. 및 'account_type'= 사용자는 그 외에 내가 그 (것)들을 포함 할 필요가 없으며 그 결과로 인해 결과가 중복되게됩니다 –

관련 문제