2012-08-09 4 views
0

복잡한 쿼리에 도움이 필요합니다. 나는 자동 완성 jquery-ui을 사용하여 일부 사용자를 검색하고 php + mysql을 검색합니다.두 테이블과 regexp를 사용하는 복잡한 sql 쿼리

사용자는 first_name, last_nameemail (requiered 필드)을 워드 프레스/buddypress 페이지에 등록 할 수 있습니다.

그래서, stackoverflow에서 찾을 수있는 예제에서는 regexp를 사용하여 쉽게 검색 할 수 있지만 first_name 또는 last_name 또는 전자 메일로 검색 할 복잡한 쿼리를 만들고 싶습니다.

first_nameemailwp_users 테이블 last_namewp_bp_xprofile_data 테이블에있다. 내가

first_nameemail 얻으려면, 이름 등 이메일에 가입하는 사용자 정의 메타을 원하지 않는 쿼리는 다음과 같습니다

SELECT * FROM wp_users WHERE display_name REGEXP '^$param' OR user_email REGEXP '^$param' 

last_name 드 얻기 쿼리는 다음과 같습니다

SELECT value FROM wp_bp_xprofile_data WHERE field_id = 5 AND user_id = ".$id." 

어떻게 혼합 할 수있는이 쿼리 (값은 LAST_NAME의 결과와 $ ID = wp_users.ID입니다)?
우리가 이것을 하나의 테이블처럼 보았다면 : selec * from users where first_name=regexp or last_name=regexp or email=regexp (근본적으로)이지만, wordpress/buddypress의 복잡한 구조에 의해 나는 이것을 할 수 없다. 도와주세요!!!

예를 들어 사용자가 3 명인 경우 첫 번째 사용자의 이름은 oscar이고 두 번째 사용자의 성은 osbourne이며 검색이 시작되면 세 번째 사용자의 이메일은 [email protected]입니다. 'o'를 입력하면 쿼리가이 3 명의 사용자를 찾습니다.

추신 : 잊어 버렸습니다.하지만 아이디, 이름, 성 및 이메일을 반환해야합니다.

보너스 : 저는 regexp^$ params를 사용하여 시작 문자에서 문자열을 찾습니다. regexp를 사용하면 어디에서나 결과를 찾을 수 있습니다.

+0

에 대한

SELECT u.ID, u.display_name, u.user_email, d.value FROM wp_users u, wp_bp_xprofile_data d WHERE ( u.ID IN ( SELECT ID FROM wp_users WHERE display_name REGEXP '^$param' ) OR u.ID IN ( SELECT user_id as ID2 FROM wp_bp_xprofile_data WHERE field_id = 5 AND value REGEXP '^$param' ) ) AND (u.ID=d.user_id AND field_id=5) 

덕분에이 두 테이블을 조인에서 당신을 방지 무엇인가? – invertedSpear

답변

0
SELECT * FROM wp_users 
WHERE display_name REGEXP '^$param' 
    OR user_email REGEXP '^$param' 
    OR concat('.',id,'.') IN 
     (SELECT user_id FROM wp_bp_profile 
     WHERE field_id = 5 AND value REGEXP '^$param') 
+0

나는 잊었다. 그러나 나는 id, 성, 성 및 이메일을 돌려 줄 필요가있다. 이 솔루션은 성을 위해 작동하지 않습니다. – user1588888