“项目”和“参与者”之间存在多对多关系。一个项目可以有多个参与者,一个参与者可以有多个项目。假设 John 有 3 个项目。当我使用 join 执行 sql 时,我得到 3 行,Johns 的每个项目一行。虽然这是我想要的数据,但在 View (MVC) 中,我只想显示 John 1 次,并且 Johns 项目的 View 上有一个字段,我想在其中显示所有 3 个 johns 项目。有没有一种 sql 方法可以将这些项目捆绑在一起,或者我是否必须使用类似于以下的逻辑来做到这一点:
pseudo-code
userid=null; //to make sure that i am grouping only one users' projects
projectname = null; //will be appended to in each iteration of loop
foreach( row_in_resultset as row )
{
projectname += " " + row->projectname;
if( this_is_a_different_userid )
{
projectname = ""; //reset the project name
}
}
上面的代码只是一个快速的大脑转储,但希望很清楚,对于每个参与者,我想要一个像这样的 1 个参与者对象的最终结果
participant
{
name = john smith
address = 100 foobar street
projects = paint house, feed cat, do stuff
}
与我目前得到的相反,这是
participant
{
name = john smith
address = 100 foobar street
projects = paint house
}
participant
{
name = john smith
address = 100 foobar street
projects = feed cat
}
participant
{
name = john smith
address = 100 foobar street
projects = do stuff
}
这似乎是一个非常基本的问题,在过去我就已经完成了。但我正在寻找一种可能的更好的方法。
谢谢!
最佳答案
您可以使用 mysql GROUP BY 和 GROUP_CONCAT 方法
SELECT
users.username, users.address,
GROUP_CONCAT(projects SEPARATOR ', ') AS projects
FROM
users JOIN projects_to_users
ON users.user_id = projects_to_users.user_id
JOIN projects
ON projects_to_users.project_id = projects.project_id
GROUP BY
users.user_id;
希望这能解释它:)
关于mysql - 如何通过 sql 对多对多的结果进行分组,而不是使用 php 来进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252825/