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


PHP and mysql how to use joins to get the desired result

使用Mysql和Php时,

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

我的问题很简单,但我不知道该怎么做。

基本上我想连接2个或更多的表,并以这样的方式结束:

['match from table 1'][0,1,2,3,4]

表1是主表,0、1、2、3、4是连接的结果。目前,当执行join

时,我一直以这种格式获得结果。

["表1"][0]
("表1")[1]
("表1")[2]

基本上是这样的,我有两个表,酒店和客房。当我加入他们时,我得到了相同的酒店名称和一个房间,我的下一个结果是与下一个房间完全相同的酒店名称…

我想让每个酒店返回1个结果,并将所有房间打包到数组中。我从来没有理解如何实现这个只有一个mysql查询。

p。我完成了我的本科(但sql一直是我的弱点)我现在正在考虑在12月的假期做一个简短的sql在线复习课程。所以如果你愿意凑钱给我指一个好的,我会很感激的。

谢谢!

如果我说对了你需要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中正常的一维数组:)