2012-11-02 2 views
1

이 구조를 가진 테이블이 있습니다.mySQL에서 복잡한 쿼리 (여러 테이블에서 사용자 검색)

표 # 1 : 사용자 (ID, 사용자 _)

1, 'john777' 
2, 'andy' 
3, 'tom' 

테이블 # 2 : user_meta (meta_ID 266 'meta_name', 'meta_value') 너희들 잘 알고 들어

1, 1, 'first_name', 'John' 
2, 1, 'last_name', 'Smith' 
3, 2, 'first_name', 'Andy' 
4, 2, 'last_name', 'Pete' 
5, 3, 'first_name', 'Thomas' 
6, 3, 'last_name', 'Tan' 
7, 3, 'other_random_meta', 'abcxyz' 

WordPress의 경우 이것은 데이터베이스 구조입니다. 내가하고 싶은 것은 first_name과 last_name으로 구성된 user_name과 full name을 기반으로 검색 용어와 일치하는 사용자의 사용자 ID를 얻는 것입니다. 즉

, 나는 검색이 검색어 1을 반환하려면 : '요', 'john7', '스미스', '존 SMI', '스미스 조'

+0

일치하는 고유 사용자 ID의 당신을 받아야하고, 질문은 ?? : 사용자를 일치의 ID를 원한다면, 당신은 함께 두 개의 테이블을 가입해야 ?? – thatidiotguy

+0

질문은 어떻게 위에서 언급 한 결과를 달성하기 위해 쿼리를 작성합니까? – mushroom

답변

1

SELECT * FROM 
(
    SELECT user_name AS user FROM users 
    UNION ALL 
    SELECT meta_value AS user FROM user_meta 
    WHERE meta_name = 'first_name' OR meta_name = 'last_name' 
) 
WHERE user LIKE '%your search%' 

은 조건에 맞는 모든 사용자를 반환합니다. 중복은 제거되지 않고 그대로 반환됩니다.

는 경기의 수를 나타내는 단일 행이 SELECT COUNT(*) …을 사용하여 만 0 또는 1이 사용 SELECT COUNT(*) > 0 …


좋아, 새 쿼리를 얻을 얻으려면.

SELECT DISTINCT u.user_id 
FROM users u 
JOIN user_meta m 
ON u.user_id = m.user_id 
WHERE u.user_name LIKE '%name%' OR m.first_name LIKE '%name%' OR m.last_name LIKE '%name%' 
+0

죄송합니다. 한 가지 더 명확히하기 위해 user_meta 테이블에는 사용자 전자 메일과 같은 다른 임의 메타가 포함될 수 있습니다. 나는 단지 first_name과 last_name에서 검색을 연결하기를 원한다. – mushroom

+1

@jon : 알겠습니다. 그러나 WHERE 절을 추가하는 것만 큼 쉽지만 아무 것도 복잡하지 않습니다 ... – knittl

+0

응답 해 주셔서 감사합니다. 그러나 내가 찾고있는 것을 완전히 이해했다고 생각하지 않습니다. 나의 나쁜 설명에 대한 사과. 실제로 검색 쿼리와 일치하는 사용자의 ID를 얻고 싶습니다. 귀하의 질의가 제공하는 것만이 각 부분에 대한 일치를 제공합니다. – mushroom

1
SELECT DISTINCT ID FROM 
(SELECT ID AS ID FROM users WHERE user_name LIKE 'YOURSEARCH%' 
UNION 
SELECT t1.user_id FROM 
    (SELECT user_id, meta_value AS firstName FROM user_meta WHERE meta_name ='first_name') AS t1 
INNER JOIN 
    (SELECT user_id, meta_value AS lastName FROM user_meta WHERE meta_name ='last_name') AS t2 ON t1.user_id=t2.userID 
WHERE concat_ws(' ',lastName,firstName) LIKE'YOURSEARCH%') 

이것은 당신의 검색 기준에

관련 문제