查询多个连接并返回太多结果

时间:2012-11-22 20:18:01

标签: php mysql database jointable

我是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多个结果,几乎都是相同的。它将结果乘以db中的字段数,例如player(1)* bracket(3)* classes(11)* tags(5),它将输出165行几乎相同的数据,并且字段括号,类别不同和标签。

如果我按players.id对结果进行分组,我只会获得一行,但其他字段的数据会丢失。我想获得一行,其中包含所有内容(可能包含数组中的多个数据)。

DB有7个表 - 玩家,标签,类,括号和3个表,其中包含玩家ID和标签/类/支架ID组合。

我一直在搜索网络,但没有什么真正帮助我。如果有人可以帮我这个,那将是非常好的。感谢您的回复,我很抱歉我的英语不好,而不是我的主要语言。

1 个答案:

答案 0 :(得分:0)

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

正如您所见,您可以进行GROUP BY,但之后它只会给您一个组合。

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

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

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