【问题标题】:PHP and mysql how to use joins to get the desired resultPHP 和 mysql 如何使用连接来获得想要的结果
【发布时间】:2016-10-18 07:59:40
【问题描述】:

使用Mysql和Php时,

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

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

基本上 id 喜欢加入 2 个或更多表并最终得到这样的结果:

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

其中表 1 是主表,0,1,2,3,4 是连接的结果。 目前,我在进行连接时不断得到这种格式的结果

['table1'][0]
['table1'][1]
['table1'][2]

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

id 就像每个酒店返回 1 个结果,所有房间都打包到数组中。我从来不明白如何只用一个 mysql 查询来实现这一点。

附言。我读过本科(但 sql 一直是我的弱点) 我现在正在考虑在 12 月的休息时间做一个简短的 sql 在线复习课程。因此,如果您愿意参与并指出我的一个好的 ID,不胜感激。

谢谢!

【问题讨论】:

  • 要么使用RIGHT JOIN,要么切换表格,以便将酒店与房间相匹配。我对 SQL 没有那么深入,但在这种情况下,最好在酒店上执行一个 foreach 循环并检索房间。除非有非常具体的理由不这样做。
  • 好的,所以我尝试了这样的右连接: SELECT * FROM vendor v RIGHT JOIN accomodation_room ar ON v.id=ar.vendor_id 但我最终还是会在同一家酒店返回多个结果,即: ['hotel1']['room1'] 然后 ['hotel1']['room2'] 而不是 ['hotel1'][0,1,2,3,4]

标签: php mysql arrays join


【解决方案1】:

如果我说对了,您需要 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 中的普通一维数组 :)

【讨论】:

  • 我只是想也许有一种方法可以从查询中获取关联数组。我一直在使用 PHP 来迭代结果并构建数组。估计我会继续这样做。
  • 您可以使用查询在一个循环中完成所有操作以简化事情。
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多