2011-03-27 5 views
2

두 가지 질문과 답변이 있습니다.동일한 사용자의 두 테이블에서 데이터를 가져 오는 중입니까?

- questions{id,user_id,question,date} 
- answers {id,q_id,user_id,answer, date} 

내가 같은 사용자가 입력 된 질문과 답변을 검색 할

i.e. select all answer and all questions for ID=39 order by date DESC 

내가 쿼리를 가지고, 내가 배열을 가져 오기를 통해 동안을 꿔도 후, 데이터를 표시 할 때 어떻게 질문인지 대답인지 구분할 수 있으므로 올바르게 표시 할 수 있습니다.

편집 :

SELECT 'Q' AS 
TYPE , q.question AS value, q.date 
FROM questions q 
WHERE q.user_id =39 
UNION ALL SELECT 'A' AS 
TYPE , q.question AS value, a.date 
FROM answers a,questions q 
WHERE a.q_id = q.id 
AND 
WHERE a.user_id =39 
ORDER BY `date` DESC 

메신저 미안하지만 메신저 후 오히려 대답 자체를 대답 된 질문을 시도. 나는 SQL 및 상단에있는 데이터베이스 설계를 업데이트,하지만 난 오류를

+0

두 가지 별도의 쿼리를 사용하여 질문과 답변을 구분할 수 있습니다. – sikas

+0

새 질문을 게시하여 쿼리 및 오류 세부 정보를 제공하십시오. –

+0

내 프로필에서 확인해 보니 :) :) 죄송합니다. – pingpong

답변

2

사용을 점점 계속 :

SELECT 'Q' AS type, 
     q.question AS value, 
     q.date 
    FROM QUESTION q 
    WHERE q.user_id = ? 
UNION ALL 
    SELECT 'A' AS type, 
     a.answer AS value, 
     a.date 
    FROM ANSWER a 
    WHERE a.user_id = ? 
ORDER BY `date` DESC 

UNIONUNION ALL은 하나의 결과 집합을 반환하는 쿼리를 결합하는 데 사용됩니다. UNION 중복을 제거합니다. UNION ALL은 중복을 제거하지 않으며 UNION보다 빠릅니다. 그러나 UNION의 모든 SELECT 문의 SELECT 절에는 동일한 수의 열이 있어야합니다. 데이터 유형은 각 위치에서 일치해야합니다.

답변과 질문 값을 구별하기 위해 정의 된 정적 값은 대답을 나타내는 "A"와 질문을 나타내는 "Q"입니다. 응용 프로그램 계층 코드는 데이터를 원하는대로 형식을 지정하는 데 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.하지만 인스턴트 메신저로 PHP를 사용하여 데이터를 가져올 때 어떻게 타입 A 또는 타입 Q를 사용했는지 알 수 있습니까? !!! – pingpong

+0

@pingpong : PHP에서 결과 집합 행의 값을 확인합니다. –

+0

덕분에 근본적으로 단어 유형은 이제 실제로는 가치가 있습니다. 즉, FetchArray [ 'type']':)) +1이 FetchArray [ 'type']'이 A 또는 Q와 같은지 확인합니다. – pingpong

2
SELECT 'Q' as `type`, 
     id, 
     user_id, 
     question as quesion_or_answer, 
     `date` 
FROM questions 
WHERE user_id = 39 
UNION ALL 
SELECT 'A' as `type`, 
     id, 
     user_id, 
     answer as quesion_or_answer, 
     `date` 
FROM answers 
WHERE user_id = 39 
ORDER BY `date` DESC 
+1

+1 : 16 초에 나를 이길 수 있습니다. –

-1

질문과 답변 사이에는 관계가없는 것처럼 보입니다. 별도의 쿼리를 사용하십시오.

+1

내 downvote (나는 감정에 동의하는 경향이있다). 이는 날짜별로 조합 된 방식으로 주문해야한다는 요구 사항을 충족시키지 못합니다. –

0

나는 게으른하고이 두 테이블을 연결합니다으로 전혀 UNION을 사용 :

SELECT *, NULL as answer FROM questions WHERE ID=39 
UNION ALL 
SELECT *, NULL as question FROM answers WHERE ID=39 
ORDER BY date DESC 

나중에 differantiation의 트릭 널 필드 또는 다른 식별자를 가지고하는 것입니다.

관련 문제