PHP和mysql如何使用连接来获得所需的结果

时间:2016-10-18 07:59:40

标签: php mysql arrays join

使用Mysql和Php时,

我总是做单个查询,然后使用foreach循环从mysql数据库构建一个结果数组。我们想知道的是如何使用mysql来实现这一点。

我的问题很简单,但我不确定该怎么做。

基本上我喜欢加入2个或更多的表,最后得到这样的结果:

['匹配表1'] [0,1,2,3,4]

其中表1是主表,0,1,2,3,4是连接的结果。 目前,我在做加入时一直以这种格式获得结果

['表1'] [0]
['表1'] [1]
['表1'] [2]

基本上发生的事情是我有2张桌子, 酒店和客房。当我加入他们时,我得到同一个酒店名称,有1个房间, 我的下一个结果是与下一个房间的酒店名称相同......

每个酒店返回的结果是1个结果,所有房间都包含在阵列中。我从来没有理解如何只使用mysql查询来实现这一点。

聚苯乙烯。我做了本科生(但是sql总是我最薄弱的一点) 我现在正在考虑在12月份休息期间做一个简短的sql刷在线课程。因此,如果您想填写并指出一个好的,我会很高兴。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我说得对,你想要sql查询,它将返回关联数组,如下所示:

[hotel1] => [
             0 => room1,
             1 => room2
             ..........
...........
];

SQL并不像那样工作。它返回整行数据。如果左表中有一个结果链接到右表中的许多其他结果,则根据SELECT查询,您很可能会在左表中重复数据行,并在右表中包含相关数据。 你可以实现多数组的方式(我在上面提到过)是通过在php中迭代结果并按你想要的方式修改它。

我用一个我忘了的解决方案编辑了我的答案。我不确定它是否会对你有所帮助:

SELECT table1.id, table2Result.implodedField2 FROM table1
JOIN (
    SELECT id, table1Id, GROUP_CONCAT(field2 SEPARATOR ', ') AS implodedField2 FROM table2 WHERE table1Id=:table1Id
) AS table2Result ON table2Result.table1Id=table1.id
WHERE table1.id=:id

table1Id - 是table2中用于链接到table1的列(在您的情况下,这可能是表hotel_rooms中的hotel_id) 问题是您必须传递确切的table1 id(hotel_id)才能获得结果。 此查询应从table1返回一个结果,并从table2返回连接结果(对于给定列)。这将是php中的正常一维数组:)

相关问题