Php 我的查询没有';不行。我能做什么?

Php 我的查询没有';不行。我能做什么?,php,mysql,sql,Php,Mysql,Sql,我想显示一个带有这些-s: 项目名称 说明 状态 开始日期 结束日期 用户 问题是,我的子查询返回的行不止一行。 通常有4个人属于一个项目,一个所有者、一个经理、一个开发人员和一个测试人员。所有者可以创建新项目,这样他就可以看到我想要创建的项目表,但我不能将用户放在表的末尾,因为每一行都有多个用户 以下是查询: SELECT project.id, title, description, status, start,end FROM project LEFT J

我想显示一个带有这些
-s:
项目名称
说明
状态
开始日期
结束日期
用户

问题是,我的子查询返回的行不止一行。 通常有4个人属于一个项目,一个所有者、一个经理、一个开发人员和一个测试人员。所有者可以创建新项目,这样他就可以看到我想要创建的项目表,但我不能将用户放在表的末尾,因为每一行都有多个用户

以下是查询:

SELECT project.id, title, description, status, start,end
        FROM project 
        LEFT JOIN users ON (SELECT userid FROM roles,project WHERE projectid=project.id)=users.id
我的桌子是:

项目
id
标题
说明
状态
开始
结束

用户
id
名称
通过
电子邮件

角色
id
投影d
用户ID

rolename

在子句中使用
,例如

JOIN users ON users.id IN (SELECT userid FROM ....)

=
用于比较两个单一值<
中的code>用于检查一组值中是否有单个值。

使用
中的
子句,例如

JOIN users ON users.id IN (SELECT userid FROM ....)

=
用于比较两个单一值<
中的code>用于检查一组值中是否有单个值。

使用
中的
子句,例如

JOIN users ON users.id IN (SELECT userid FROM ....)

=
用于比较两个单一值<
中的code>用于检查一组值中是否有单个值。

使用
中的
子句,例如

JOIN users ON users.id IN (SELECT userid FROM ....)

=
用于比较两个单一值<
中的code>用于检查一组值中是否有单个值。

尝试联接所有表,而不是像下面这样的子查询:

    SELECT project.id, title, description, status, start,`end` ,GROUP_CONCAT( users.name) AS usernames
    FROM project 
    LEFT JOIN roles On roles.projectid = project.id 
    LEFT JOIN users ON roles.userid =users.id
    GROUP BY project.id

尝试按如下方式连接所有表而不是子查询:

    SELECT project.id, title, description, status, start,`end` ,GROUP_CONCAT( users.name) AS usernames
    FROM project 
    LEFT JOIN roles On roles.projectid = project.id 
    LEFT JOIN users ON roles.userid =users.id
    GROUP BY project.id

尝试按如下方式连接所有表而不是子查询:

    SELECT project.id, title, description, status, start,`end` ,GROUP_CONCAT( users.name) AS usernames
    FROM project 
    LEFT JOIN roles On roles.projectid = project.id 
    LEFT JOIN users ON roles.userid =users.id
    GROUP BY project.id

尝试按如下方式连接所有表而不是子查询:

    SELECT project.id, title, description, status, start,`end` ,GROUP_CONCAT( users.name) AS usernames
    FROM project 
    LEFT JOIN roles On roles.projectid = project.id 
    LEFT JOIN users ON roles.userid =users.id
    GROUP BY project.id

我假设您希望结果表的一个单元格中包含所有用户,但其单元格中仅包含其他字段的一个副本。如果您真的希望将其放在一个表中,则需要在代码中解析结果。使用包含所有所需字段的查询,如下所示:

SELECT project.id, title, description, status, start,end, users.name
FROM project
LEFT JOIN roles On roles.projectId = project.id
LEFT JOIN users ON roles.userId = users.id
然后在代码中检查重复项,不要显示它们。伪代码示例:

loop over all result rows {
   if( new_id <> old_id ){
      if not first row close your previous row </tr>
      display <tr>
      display all the fields
   }else{
       only display the addition of the user name (with a <br> or whatever to separate)
   }
}
close your last row </tr>
在所有结果行上循环{
if(新id旧id){
如果不是第一行,请关闭上一行
展示
显示所有字段
}否则{
仅显示添加的用户名(使用
或任何分隔符) } } 关闭最后一排

这可能会以您想要的方式显示,但数据不会与一个显示表对齐。考虑一个链接,将用户列表显示为弹出式div.< /p> < p>我假设您希望所有用户都在您的结果表的单元格中,但它们的单元格中只有其他字段的一个副本。如果您真的希望将其放在一个表中,则需要在代码中解析结果。使用包含所有所需字段的查询,如下所示:

SELECT project.id, title, description, status, start,end, users.name
FROM project
LEFT JOIN roles On roles.projectId = project.id
LEFT JOIN users ON roles.userId = users.id
然后在代码中检查重复项,不要显示它们。伪代码示例:

loop over all result rows {
   if( new_id <> old_id ){
      if not first row close your previous row </tr>
      display <tr>
      display all the fields
   }else{
       only display the addition of the user name (with a <br> or whatever to separate)
   }
}
close your last row </tr>
在所有结果行上循环{
if(新id旧id){
如果不是第一行,请关闭上一行
展示
显示所有字段
}否则{
仅显示添加的用户名(使用
或任何分隔符) } } 关闭最后一排

这可能会以您想要的方式显示,但数据不会与一个显示表对齐。考虑一个链接,将用户列表显示为弹出式div.< /p> < p>我假设您希望所有用户都在您的结果表的单元格中,但它们的单元格中只有其他字段的一个副本。如果您真的希望将其放在一个表中,则需要在代码中解析结果。使用包含所有所需字段的查询,如下所示:

SELECT project.id, title, description, status, start,end, users.name
FROM project
LEFT JOIN roles On roles.projectId = project.id
LEFT JOIN users ON roles.userId = users.id
然后在代码中检查重复项,不要显示它们。伪代码示例:

loop over all result rows {
   if( new_id <> old_id ){
      if not first row close your previous row </tr>
      display <tr>
      display all the fields
   }else{
       only display the addition of the user name (with a <br> or whatever to separate)
   }
}
close your last row </tr>
在所有结果行上循环{
if(新id旧id){
如果不是第一行,请关闭上一行
展示
显示所有字段
}否则{
仅显示添加的用户名(使用
或任何分隔符) } } 关闭最后一排

这可能会以您想要的方式显示,但数据不会与一个显示表对齐。考虑一个链接,将用户列表显示为弹出式div.< /p> < p>我假设您希望所有用户都在您的结果表的单元格中,但它们的单元格中只有其他字段的一个副本。如果您真的希望将其放在一个表中,则需要在代码中解析结果。使用包含所有所需字段的查询,如下所示:

SELECT project.id, title, description, status, start,end, users.name
FROM project
LEFT JOIN roles On roles.projectId = project.id
LEFT JOIN users ON roles.userId = users.id
然后在代码中检查重复项,不要显示它们。伪代码示例:

loop over all result rows {
   if( new_id <> old_id ){
      if not first row close your previous row </tr>
      display <tr>
      display all the fields
   }else{
       only display the addition of the user name (with a <br> or whatever to separate)
   }
}
close your last row </tr>
在所有结果行上循环{
if(新id旧id){
如果不是第一行,请关闭上一行
展示
显示所有字段
}否则{
仅显示添加的用户名(使用
或任何分隔符) } } 关闭最后一排

这可能会以您想要的方式显示,但数据不会与一个显示表对齐。考虑一个链接,将用户列表显示为弹出式div.< /p>参见GROMP-CONTAT,用于快速获取非规范化的“用户”文本列,即“多行到一列”。也可以使用分组方式。这对于非规范化单个值(例如名称)来说是可行的(但在处理关联值方面做得很差)。或者,在客户端进行处理。能否提供一些数据和预期输出?有关如何快速获取非规范化的“用户”文本列(即“多行一列”)的信息,请参阅GROUP_CONCAT。也可以使用分组方式。这对于非规范化单个值(例如名称)来说是可行的(但在处理关联值方面做得很差)。或者,在客户端进行处理。能否提供一些数据和预期输出?有关如何快速获取非规范化的“用户”文本列(即“多行一列”)的信息,请参阅GROUP_CONCAT。也可以使用分组方式。这对于非规范化单个值(例如名称)来说是可行的(但在处理关联值方面做得很差)。或者,在客户端进行处理。您能提供一些数据和预期输出吗?有关如何快速获得非规范化的“用户”te,请参阅GROUP_CONCAT