0

我是 php 和 mysql 的新手,我正在尝试 2 天来创建一个 Web 应用程序,它可以从表单中存储有关用户的特定数据,而不是允许用户基于类似的稍微复杂的表单进行搜索。我让表单工作并输入到数据库,但我在从 mysql 接收数据时遇到问题,也许将来我也会使用搜索功能,但我还没有考虑太多。现在我专注于从 db 获取特定数据。

SELECT players.*, 
    brackets.name AS interested_in, 
    classes.name AS looking_for,
    tags.name AS tagged_with 
FROM players JOIN player_brackets ON (players.id = player_brackets.player_id) 
JOIN brackets ON (player_brackets.bracket_id = brackets.id) 
JOIN player_classes ON (player_brackets.player_id = player_classes.player_id) 
JOIN classes ON (player_classes.class_id = classes.id) 
JOIN player_tags ON (player_classes.player_id = player_tags.player_id) 
JOIN tags ON (player_tags.tag_id = tags.id) 
WHERE players.id = '18'

我有这个工作正常的查询,但我从中获得的数据是数据库中数据的每一个组合,现在大约有 100 多个结果几乎相同。它将结果乘以数据库中的字段数,例如播放器 (1) * 括号 (3) * 类 (11) * 标签 (5),它将输出 165 行几乎相同的数据,但字段括号、类的差异和标签。

如果我将结果分组,players.id我只会得到一行,但其他字段的数据会丢失。我想得到 1 行,它将包含所有这些(可能在一个数组中包含多个数据)。

DB 有 7 个表格 - 球员、标签、班级、括号和 3 个表格,其中包含球员 ID 和标签/班级/括号 ID 组合。

我一直在搜索网络和 SO,但没有什么真正帮助我。如果有人可以帮助我解决这个问题,那就太好了。感谢您的回复,我很抱歉我的英语不好,它不是我的主要语言。

4

1 回答 1

0

当您加入时,MySQL 将为您提供各种组合。

如您所见,您可以 GROUP BY,但它只会给您一种组合。

我认为您正在寻找一系列查询(“获取玩家 1 的所有括号”然后“获取括号 12 中玩家 1 的所有类”等)。

或者您可以在您的应用程序中智能地解析结果。

还有 GROUP_CONCAT,但这很少能满足任何人的需求(因为它作为一个字符串返回)。

于 2012-11-22T21:03:39.523 回答