我是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组合。
我一直在搜索网络,但没有什么真正帮助我。如果有人可以帮我这个,那将是非常好的。感谢您的回复,我很抱歉我的英语不好,而不是我的主要语言。
答案 0 :(得分:0)
当你加入时,MySQL将为你提供各种组合。
正如您所见,您可以进行GROUP BY,但之后它只会给您一个组合。
我认为您正在寻找一系列查询(“获取播放器1的所有括号”,然后“获取第12个播放器中的播放器1的所有类”等)。
或者您可以在应用中智能地解析结果。
还有GROUP_CONCAT,但很少满足任何人的需求(因为它以一个字符串的形式返回)。