我想显示<table>
这些<th>
- s:
项目名称
说明
状态
开始日期
结束日期
用户
问题是,我的子查询返回超过1行。 通常有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
我的表是:
PROJECT
ID
标题
说明
状态
启动
结束
USERS
ID
命名
通过
电子邮件
角色
ID
专案编号
用户ID
角色名
答案 0 :(得分:1)
使用IN
条款,例如
JOIN users ON users.id IN (SELECT userid FROM ....)
=
用于比较两个单值。 IN
用于检查单个值是否在一组值中。
答案 1 :(得分:1)
尝试连接所有表而不是像这样的子查询:
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
答案 2 :(得分:1)
我假设您希望结果表的单元格中的所有用户只需要其单元格中其他字段的一个副本。如果您真的想在一个表中使用它,则需要在代码中解析结果。使用包含所需字段的查询:
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>
这可能会以您希望的方式显示它,但数据未针对一个显示表对齐。考虑一个链接,将用户列表显示为弹出式DIV。