从MySQL获取高级数据

时间:2014-10-02 21:37:37

标签: php mysql

我有一张名为'objects,events& amp; events_types',这些表有一个结构(不是它的所有结构,但我需要从数据库中显示的基本信息)和一些这样的信息:

物件:
结构: id(INT), title(TEXT)...
数据:

  • 1,House#1
  • 2,House#2
  • 3,House#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

Events_Types:
结构: id(INT), name(VARCHAR)
数据:

  • 1,闹钟
  • 2,Dis / Arm
  • 3,Fire
  • 4,闹钟按钮
  • 5,未知

我有一个页面,它从events表加载所有数据,但是我需要页面只显示objects表中有events表数据的对象。它不会从objects表加载我的id(3)对象,因为events表中没有行object_id 3。

我需要一个包含以下列的html表

  • objects.id
  • objects.title
  • events_types.name
  • events表计算,此表的object_idid表的objectsevent_type表的events得到来自URL的$_GET['event_type']将被定义为变量

包含来自数据库的信息的表格示例$_GET['event_type'] = 1events_types表格中的“1”为Alarm

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

但是不会显示House#3,因为events表中没有数据。

有关信息,在实际表格中,我objects表中有大约200条记录,每月events表中有大约500条记录。这对我来说就像一个统计系统。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

这应该为每个事件提供一条记录,该记录将标记该事件类型的名称。任何没有与之相关的事件的对象都不会出现。