2014-10-02 4 views
1

'objects, events & events_types'라는 테이블이 있는데이 테이블의 구조는 구조체가 아니라 데이터베이스에서 표시해야하는 기본 정보입니다. 이런 정보 :MySQL에서 고급 데이터 가져 오기

개체 :
구조 : id(INT), title(TEXT)...
데이터 :

  • 1 집 # 1
  • 2 집 # 2
  • 3 집 # 3

이벤트 :
구조 : id(INT), object_id(INT), event_type(INT)
데이터 :

,
  • 1, 1, 3
  • 2, 1, 1
  • 3, 2, 4
  • 4, 2, 5
  • 5, 2, 1
  • 6, 1, 1
  • 7, 2, 2
  • 8, 1, 3

에버스 ents_Types :
구조 :id(INT), name(VARCHAR)
데이터 :

  • 1 알람
  • 2, 지/암
  • 3 불
  • 4, 알람 버튼
  • 5, 알 수 없음

나는 events 테이블에서 모든 데이터를로드하는 페이지가 있지만 events 테이블에 데이터가있는 objects 테이블의 개체 만 표시합니다. events 테이블에 행이 없기 때문에, object_id의 테이블을 가지고있어, id (3) 오브젝트를 objects 테이블로부터로드하지 않습니다.이 테이블의 object_idobjects 테이블의 id 및입니다

  • objects.id
  • objects.title
  • events_types.name
  • events 테이블 :

    나는 다음과 같은 열와 HTML 테이블이 필요 event_type ~ events 표가 있습니다.

    | 1 | House #1 | Alarm: 2 | 
    | 2 | House #2 | Alarm: 1 | 
    

    있지만 집 번호 : $_GET['event_type'] = 1는 이것이 '1'events_types 테이블 Alarm 인 데이터베이스 정보 테이블의 가변

예로서 정의 될 것이다 URL로부터 Y $_GET['event_type'] 3은 events 테이블에 데이터가 없으므로 표시되지 않습니다.

실제 테이블에는 objects 테이블에 약 200 개의 레코드가 있고 매월 events 테이블에 약 500 개의 레코드가 있습니다. 그것은 나를위한 통계 시스템과 같습니다. 이 쿼리는 당신에게 데이터를 가져 오는 경우

+0

시도한 것을 나눌 수 있습니까? –

+0

@JayBlanchard 내 생각에 ... 현재 스크립트에는 약 400 줄과 16k + 문자가 있기 때문에 나는 할 수 없다. 모든 것이 완벽하게 작동하지만 이것은이 기능을위한 애드온과 같을 것입니다. 나도 몰라, 내가 필요한 MySQL 쿼리의 종류는 ... – VigoKrumins

답변

1

가입 :

SELECT 
    objects.id, 
    objects.title, 
    events_types.name 
FROM 
    objects INNER JOIN events on events.object_id = objects.id 
    INNER JOIN events_types on events_types.id = events.event_type; 

이 당신에게 하나 개의 레코드를 제공해야 각 이벤트에 대해 해당 이벤트 유형의 이름으로 레이블이 지정됩니다. 이벤트와 연관된 이벤트가없는 오브젝트는 표시되지 않습니다.

+0

위의 코드를 시도해 보면 매력적입니다 ... – Tyr

+0

글쎄, 작동하지만'objects.id'로 그룹화해야합니다 ... http://sqlfiddle.com/#!2/ c8fb5e/1이 – VigoKrumins

+0

을 시도 http://sqlfiddle.com/#!2/c8fb5e/6 –

1

은 당신이 원하는 참조 :

, 이것은 매우 간단 같은 소리 당신이 설명하고부터
SELECT O.id AS object_id, O.title, T.name, COUNT(*) as event_count 
FROM Objects O 
    JOIN Events E ON O.id = E.object_id 
    JOIN Events_Types T ON E.id = T.id 
GROUP BY O.id, E.event_type 
+0

도움을 주셔서 감사합니다. 그러나 @ scott-harris 응답이 저에게 효과적이었습니다. – VigoKrumins

+0

@Vigo, 허용 된 답변과 함께 유용한 대답을받는 경우, 그것을 upvoting을 고려하십시오. 완전히 선택 사항이지만 감상을 표현하는 좋은 방법입니다. – halfer

관련 문제