2012-12-10 5 views
0

내 웹 사이트 검색 창에서 하나의 검색어로 여러 표를 검색 할 수있게하려고합니다.검색 쿼리를 그룹화하거나 결합 하시겠습니까?

따라서 사용자가 ptb_profiles에 저장된 사용자 display_name을 검색하면 이름이 일치하는 사용자가 나오거나 ptb_stats에 저장된 국적으로 검색하면 해당 국적을 가진 모든 사용자가 표시됩니다.

나는 원래 SELECT * FROM ptb_users, ptb_stats, ptb_profiles을 사용하여 중복 검색 결과를 얻었으며 동일한 결과가 여러 번 표시되었으므로이 문제를 피하고 각 결과를 그룹화 및 조합을 사용하여 한 번만 표시하도록했습니다. 작업.

이제이 시도 필자 :

$query_for_result=mysql_query("SELECT display_name, location, gender, contact_number FROM ptb_profiles WHERE display_name LIKE '%".$query."%' OR location LIKE '%".$query."%' OR gender LIKE '%".$query."%' OR contact_number LIKE '%".$query."%' JOIN SELECT email, subscription FROM ptb_users WHERE email like '%".$query."%' OR subscription like '%".$query."%' JOIN SELECT nationality, hobbies, local_station FROM ptb_stats WHERE nationality like '%".$query."%' OR hobbies like '%".$query."%' OR local_station like '%".$query."%' 
     LIMIT 5"); 

을하지만 이것은 단지 다음과 같은 오류가 나타납니다 : 내가 잘못거야 어디

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PTB1/includes/mod_sidebar/search.php on line 31 

누군가가 말해 주실 수 있습니까?

+0

귀하는 귀하의 스키마 또는 코드를 보여 주거나 계획을 설명하지 않았습니다. 에러는 * mysql_fetch_array()에 도착하기 전에 코드가 실패했거나 적절한 체크를하지 않았기 때문에 발생합니다. – symcbean

+0

가능한 중복 [mysql_fetch_array()는 매개 변수 1이 리소스가 될 것으로 예상하고 부울은 select에서 제공됨] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource- boolean-given-in-select? answertab = votes # tab-top) –

+0

[** 새 코드에서 mysql_ * 함수를 사용하지 마십시오.] (http://bit.ly/phpmsql). 더 이상 유지 관리되지 않으며 공식적으로 사용되지 않습니다 (https://wiki.php.net/rfc/mysql_deprecation). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). –

답변

0

이렇게하는 것이 유일한 방법은 아닙니다. 그러나 GROUP BY를 쿼리에 적용하면 여러 조인 된 테이블에서 검색을 수행하고 사용자 별 목록을 쉽게 가져올 수 있습니다. ...

그것의 가능한 사용자가 ptb_stats 또는 ptb_profiles에 레코드가없는 경우는 왼쪽에 조인

SELECT u.* FROM ptb_users u 
INNER JOIN ptb_stats s ON s.user_id=u.id 
INNER JOIN ptb_profiles p ON p.user_id=u.id 
WHERE "this or that" 
GROUP BY u.id 

변경 조인 ...이 같은 ID 열 뭔가 작동 할 수 있습니다 통해 모든 테이블이 관련 가정

+0

SELECT u. * FROM ptb_users AS u – vodich

+0

"AS"키워드가 누락되었다고 말하는 경우 "SQL"키워드가 SQL 구문에 실제로 필요하지 않음을 이해하십시오. 수십 년 전부터 유물이되었습니다. – lifo

+0

몰랐습니다! 감사! – vodich

0

mysql_fetch_array()은 약 $query_for_result이 쿼리 결과가 아닙니다. mysql_query()의 반환 값을 확인해야합니다. SQL 문에 문제가 있으면 false를 반환합니다. 이러한 오류를 방지하고 진단하려면 적어도

$sql = "select ..."; 
$result = mysql_query($sql) or die("Error in $sql: " . mysql_error()); 

을 수행하십시오.

관련 문제