2011-04-29 114 views
0

我正在构建一个PHP5应用程序,我需要列出其中的项目以及关于它们的所有相关信息。为此,我有三个表格,分别命名为:kc_projects,kc_project_memberskc_users。我有ID的所有的人,并有各行中kc_project_members列连接各自的用户,他在注册项目做一个查询:最好的方法是什么?

现在,我有这个疑问:

SELECT * FROM kc_projects AS p 
INNER JOIN kc_project_members AS pm 
ON pm.PROJECT_ID = p.ID 
INNER JOIN kc_users AS u 
ON u.ID = pm.USER_ID 

但它不能按我的意愿工作,因为它实际上是检索我想要的结果,但不是按照我想要的方式。它创建一个数组,另一个数组,并在该数组中,我有另一个数组包含查询结果。它也为我创建了每个用户的重复结果,这意味着如果我只有一个用户在该项目中注册,它只会返回一个项目。但是如果我有更多的东西,它会像注册用户那样返回我的数组,并且数组总是具有相同的项目信息。我希望他只返回一个项目,并在其中包含一个包含用户的数组。

有没有办法做到这一点,正确的方式?

感谢,
灼烧

+0

你想要的输出目前尚不清楚。您可以在单个结果集中执行此操作,这可能会复制用户和项目信息,也可以通过执行多个查询并将结果集关联到您的PHP代码中来分解数据。你要哪个? – Thomas 2011-04-29 18:45:16

+0

查询不会为您创建数组,这是在PHP端完成的。所以如果你对数组的布局不满意,那是因为你的代码构建错了。 – 2011-04-29 19:02:40

+0

为“阵列问题”检查您正在使用的库或函数来执行结果和检索结果,检查文档中的“获取模式”大多数库可以处理多种获取模式,关联,组合等,选择你的。 – regilero 2011-04-29 19:11:25

回答

0

我假设由数组你的意思是导致套...

是 - 这是可能的,但可能并不完全如你想象的那样,因为所有结果集必须具有相同的列数,如果您说... 2个项目成员用于项目ID为1和5个项目成员用于项目ID为7的项目成员。

您必须指定你想要返回哪一列 - SELECT *不会这样做诀窍(无论如何,这是一件坏事,特别是如果需要良好性能的话)。而且,用户的ID,用户名或任何需要为每个项目引用用户获取的列都必须连接成一个字符串,您应该稍后使用PHP进行解析。

下面是一个例子:

SELECT p.ID, p.PROJECT_NAME, GROUP_CONCAT(u.USERNAME SEPARATOR ',') AS PROJECT_MEMBERS 
FROM kc_projects p 
    JOIN kc_project_members pm ON p.ID=pm.PROJECT_ID 
    JOIN kc_users u ON pm.USER_ID=u.ID 
GROUP BY p.ID; 
+0

我遵循了您的建议,但我只使用了两个查询,而不是仅仅一个查询。在第一个项目中,我得到了这些项目,它的成员ID是一串字符串,第二,我得到了列出项目中所需的成员。所以我不需要为每个项目创建一个查询,并且它可以按我的需要工作。 :) – 2011-04-30 18:28:22

相关问题