在mysql中返回一对多行而不重复

时间:2014-07-05 03:41:17

标签: mysql pdo

我有一个usersuser items的数据库,每个用户可以将多个项目链接到他们的帐户。

使用我当前的SELECT查询时遇到的问题是我想要返回每个用户一次,但是所有与该用户绑定的行都是这样的:

User 1 ¬
      item id 1
      item id 2
      item id 3
User 2 ¬
      item id 1
      item id 3
      etc

这将是我理想的获取结果,因此我可以通过简单的循环正确处理数据...所以我尝试了left join但这不起作用。

我想知道如何获取上述结果?这是我目前的查询:

SELECT U.user_id, I.item_name  
FROM users U
LEFT JOIN user_items UI ON U.user_id = UI.user_id
INNER JOIN items I ON I.item_id = UI.item_id

目前,如果用户有两个或更多项目,我会收到用户ID的重复数据,我试图避免这样做。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了问题,那么您正试图遍历主/细节关系。

每当您使用JOIN时,引擎都会输出每个匹配的行集。在这种情况下,如果用户有多个项目,它将与每个项目一起出现。这不是你可以避免的,因为你不能有一个具有不同数量的列的结果集或类似“如果前一个具有相同的值,则不输出该列”。我不会尝试解决它调整查询。 LEFT JOIN仅在您希望每个没有任何项目的用户时帮助您。

为了获得所需的输出,您需要使用结果集。例如,您可以通过user_id对结果进行排序,然后遍历该集并仅在更改时打印user_id。另一种选择是使用2个查询:一个用于获取每个用户(如果需要,可以将其缩小到每个至少包含一个项目的用户),另一个用于获取每个用户的项目,遍历第一个查询的结果查询。

这两种解决方案都要求您通过存储过程或编程语言处理结果。

希望这有帮助!