搜索并打印多个查询的结果

时间:2012-01-13 11:34:44

标签: php mysql database

我有3张桌子。 service_robot_errorservice包含作为服务表中主键的外键。 robot_error没有矿石提供任何外键。

TABLE: robot_error
| id | date | stop_time | start_time | robot | position | error_code | observation | solution | downtime | logged_by |
| 1 | 02.01.2012 | 14:51:31 | 14:52:00 | 20 | 25/7 | 214 | X dir | Rob off | 29 | XXX |

TABLE: service
| service_id | service_date | service_module | service_user | service_comment | service_type |
| 1 | 13.01.2012 | Robot | XXX | Test service | Errorservice |

TABLE: service_robot_errorservice
| errorservice_id | service_id | errorservice_robot | errorservice_tracksensor | errorservice_gripper |
| 5 | 1 | 54 | OK | OK |

当用户搜索机器人(eks 16)时,我希望结果是按日期排序的robot_error中的每个实例。如果机器人已注册服务,则该实例也应显示在结果中。

示例:

robot_error instance
robot_error instance
robot_error instance
service instance
robot_error instance
service instance

这就是我想要的结果。我试着先从这个SQL

中得到结果
SELECT * FROM robot_error WHERE robot = '16'

并花一点时间将所有结果循环到robot_error表中,但我无法弄清楚如何从服务表中显示结果,任何人都可以帮忙吗? :)

1 个答案:

答案 0 :(得分:0)

我建议使用joins

  • JOIN:当两个表中至少有一个匹配时返回行
  • LEFT JOIN:返回左表中的所有行,即使右表中没有匹配项
  • RIGHT JOIN:返回右表中的所有行,即使左表中没有匹配项
  • FULL JOIN:当其中一个表中存在匹配时返回行

但是,在使用带连接的查询之前,您必须在robot_error和服务之间建立关系。它可能看起来像这样:

SELECT * FROM robot_error LEFT OUTER JOIN services ON robot_error.ID = services.FK WHERE robot = '16'

Jeff Atwood demonstrates the different Joins非常苛刻