2014-10-02 62 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

EV ents_Types:
結構:id(INT), name(VARCHAR)
數據:

  • 1,報警
  • 2,崩解/臂
  • 3,火災
  • 4,報警按鈕
  • 5,未知

我有一個頁面,其中加載events表中的所有數據,但我需要的頁面只顯示那些對象從objects表中有一個數據到events表。它不會加載我的id(3)對象從objects表中,因爲沒有行的events表中有object_id 3。

我需要有以下的列 HTML表格:

  • objects.id
  • objects.title
  • events_types.name
  • 數從events表,其中該表的object_idobjectsidevent_type from events table is got b ÿ$_GET['event_type']從URL這將被定義爲具有從數據庫,在這裏$_GET['event_type'] = 1和此「1」從events_types表是Alarm信息表中的可變

實施例:

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

但內務# 3將不會顯示,因爲events表中沒有數據。

有關信息,在真正的表格中,我每月有objects表中的約200條記錄和events表中的約500條記錄。這就像我的統計系統。

+0

你可以分享你所嘗試過的嗎? – 2014-10-02 21:38:41

+0

@JayBlanchard我想...我不能,因爲目前的腳本有大約400行和16k +字符。一切都很完美,但是這會像一個插件。我不知道,我需要什麼樣的MySQL查詢,是啊... – VigoKrumins 2014-10-02 21:40:47

回答

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 2014-10-02 21:56:22

+0

嗯,它的工作原理,但我需要通過'objects.id'將它們分組... 試試這裏:http://sqlfiddle.com/#!2/ c8fb5e/1 – VigoKrumins 2014-10-02 22:05:04

+0

嘗試這種情況:http://sqlfiddle.com/#!2/c8fb5e/6 – 2014-10-02 22:09:47

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 2014-10-02 22:14:59

+0

@Vigo,如果您收到的答案與已接受的答案一起有用,請考慮對其進行提升。這完全是可選的,但它是表達讚賞的好方法。 – halfer 2014-10-02 22:17:29