2012-10-25 5 views
2

나는 그들과 사람 사이에 1 대 다수의 관계를 가지고 있습니다. 1 인당 0 개 이상의 메모가있을 수 있습니다.사람마다 첫 번째, 두 번째, 세 번째 등의 레코드 찾기

모든 노트를 하나의 필드로 가져와야하고 노트가있는 사람이 많지 않으므로 사람당 처음 3 노트 만 가져올 계획이므로 최대한 많이 사용하는 것으로 생각했습니다. 내 모든 정보를 수집하는 3 가지 쿼리.

내 문제는 사람마다 첫 번째, 두 번째 등 참고를 얻기 위해 함께 mySQL 쿼리를 얻는 것입니다.

각 개인이 갖고있는 메모의 수를 알 수 있고 내 테이블에있는 메모를 알 수있는 쿼리가 있습니다. 나는 다음 2 일에 OFFSET 및 변경 3 번이를 실행 내가 기대했던

SELECT 
f_note, f_person_id 
FROM 
t_person_table, 
t_note_table 
WHERE 
t_person_table.f_number_of_notes > 0 
AND t_person_table.f_person_id = t_note_table.f_person_id 
GROUP BY 
t_person_table.f_person_id 
LIMIT 1 OFFSET 0 

뭔가를 시도했지만 내가 얻을 모두는 하나의 참고가되지, 다시 사람 당 하나 개의 메모를오고있다.

나는 테이블 3 사람들이 : 예제에 읽을 수없는 경우

나는,이 분명하다 바랍니다. 한 사람 (A)은 0, 1 (B), 1 (C) 2를 가지고 있습니다.

먼저 사람 B와 C의 첫 번째 쪽지를 가져와 내 사람의 테이블 메모 필드에 삽입합니다.

그러면 사람 C에 대해 두 번째 메모를 얻고이를 사람 테이블의 메모 필드에 추가합니다.

결국 나는 사람 C의 메모 필드가 자신의 2 음을 연결하는 사람 B와 C에 대한 메모를 갖게됩니다.

답변

0

안녕하십니까. 언급 한 사람마다 테이블에서 가장 최근 세 항목을 선택하는 것은 MySQL에서 쉽지 않습니다. 하지만 가능합니다. 이 질문을 참조하십시오.

Select number of rows for each group where two column values makes one group

하고, 그것에 대한 내 대답을 참조하십시오. 당신이 당신에게 세 가지 행을 제공하는 쿼리가 있으면

Select number of rows for each group where two column values makes one group

, 당신은 메모 필드를 집계 GROUP_CONCAT() ... GROUP BY를 사용할 수 있습니다.

0

이 같은 중첩 된 쿼리를 사용하여 사람 당 하나 개의 메모를 얻을 수 있습니다 : SQL의 테이블에 정의 된 고유 순서없이 기본적으로 있습니다

SELECT 
f_person_id, 
(SELECT f_note 
    FROM t_note_table 
    WHERE t_person_table.f_person_id = t_note_table.f_person_id 
    LIMIT 1) AS note 
FROM 
t_person_table 
WHERE 
t_person_table.f_number_of_notes > 0 

참고, 당신은 하위 쿼리에서 어떤 형태 또는 ORDER BY를 사용해야하므로. 그렇지 않으면 결과가 임의적 일 수 있으며 반복적으로 다른 노트를 요청하면 예기치 않게 같은 데이터가 반환 될 수 있습니다.

어쨌든 노트를 연결하려는 경우 GROUP_CONCAT 함수를 사용하여 모든 노트를 단일 열로 결합 할 수 있습니다.

+0

감사합니다. 내가 당신의 대답을 보았을 때 나는 이것을 알고 있었음을 기억했습니다. 선택 섹션에서 실제로해야 할 때 From 섹션에서 선택을 내려야한다는 것을 머리 속에 들었습니다. 그러나 나는 또한 GROUP_CONCAT 일부를 가지고 놀았고, 내가 필요한 것을 나에게 줄 수있는 하나의 성명서를 내놓을 수 있었다. 모두의 도움에 감사드립니다.나는 좀 더 복잡한 쿼리에 익숙해지기 위해 작업하는 중간 SQL 사용자이고 확실 할 것입니다. –

관련 문제