2014-06-06 2 views
0

여기 새로 왔는데 정확하게 질문하고 싶습니다. 포럼 데이터베이스에서 검색을 구현하려고합니다. '질문'테이블과 '답변'테이블 (둘 다 'id_question'필드와 관련 있음)이 있습니다. 나는 또한 '제안'테이블과 '코멘트'테이블도 가지고있다. 또한 'profile_id'필드로 이전에 언급 한 모든 테이블과 관련된 '프로필'테이블이 있는데이 프로필 테이블은 사용자에 대한 정보를 보유합니다.다중 테이블 중에서 선택하고

이전에 언급 한 네 개의 모든 테이블에서 특정 필드 ('topic', 'description'...)에 대한 광범위한 검색을 구현하고 해당 필드와 해당 필드를 작성한 사용자의 정보를 표시하고 싶습니다. 게시하다. 나는 이것을 정말로 망쳤다. 지금은 (각 테이블에 대해) 4 개의 쿼리가 있으며 각 쿼리는 프로필 테이블과 조인합니다. 더 나은 방법을 알고 계십니까?

감사합니다.

답변

0

INNER JOINS를 사용하여이를 수행 할 수 있습니다. 간단한 INNER JOINS로 시작하여보다 포괄적 인 쿼리를 작성하고 더 많은 테이블에 참여하는 것이 좋습니다. 그것은 모두 당신이 얻으려는 것에 달려 있습니다. 원하는 정보를 정확하게 반환하는 데 가능한 한 정확해야합니다. 여기

는 간단한 예이며, 가정은 내가 만든 :

을 다음 테이블 가정 : 기본 키의 *, 외래 키 #을,

questions: id_questions*, topic, description, profile_id# 
answers: id_answers*, id_questions#, topic, description, profile_id# 
suggestions: id_suggestions*, topic, description, profile_id# 
comments: id_comments*, topic, description, profile_id# 
user: profile_id*, name, details 

키워드 othercolumns : 키워드 또는 구문

를 교체

질문과 대답에 키워드 찾기

SELECT * FROM questions q 
INNER JOIN answers a 
ON q.profile_id = a.profile_id 
WHERE topic LIKE '%KEYWORD%' 
OR description LIKE '%KEYWORD%'; 
이 도움이

SELECT u.* FROM users u 
INNER JOIN answers a 
ON u.profile_id = a.profile_id 
INNER JOIN questions q 
ON q.profile_id = u.profile_id 
WHERE topic LIKE '%KEYWORD%' 
OR description LIKE '%KEYWORD%'; 

희망 :

은 질문과 답변 테이블에 키워드를 사용하는 사용자의 사용자 프로필을 가져옵니다.

편집 : 서식 지정.

+0

감사합니다.그것은 매우 도움이됩니다, 나는 또한 '답변'에서 관련 게시물이없는 '질문'의 게시물이 필요하지만, 내부 조인 대신 LEFT JOIN을 사용할 수 있다고 생각합니다. 감사! – avishag

0

네 개의 쿼리에서 사용하십시오.

그렇지 않으면 테이블에 가입하려고 시도 할 때 Cartesian product이 표시됩니다.

+0

[지도 축소] (https://en.wikipedia.org/wiki/MapReduce) 패턴으로 가장 잘 구현 된 것입니다. 당신이 평행선에서 그것을 더 잘 할 수 있다면. – tadman

+0

@tadman, 질문은 MySQL에 관한 것이고, MySQL은 map-reduce를 지원하지 않습니다. 나 자신의 답변을 추가하고 map-reduce가 나를 투표하는 대신이 문제에 어떻게 사용될 수 있는지 설명해주십시오. –

+0

나는 다운 투표하지 않았다. 4 개의 쿼리를 병렬로 트리거 한 다음 애플리케이션 코드에서이를 결합하면 원하는대로 할 수 있습니다. – tadman

0

UNION을 사용해 볼 수 있다고 생각합니다. 안 그래?

+0

4 개의 테이블에는 동일한 필드가 없지만 감사합니다. – avishag

관련 문제