mysql - 在mysql中选择一个相对结果集作为数组

标签 mysql sql

所以这是我的问题。我有 3 张 table

enter image description here

case_assign.cfid => case_fields.cfid 和 case_assign.uid => users.uid

我尝试编写的单个查询基本上获取两个日期之间的所有案例,同时还通过 case_assign 表选择分配给案例的每个人,case_assign 表还通过它和用户中的 uid 字段获取名称表。

挑战来了。由于可以将许多人分配给任何一个案例,因此它将从 case_assign 中获取多行,以获取从 case_fields 中获取的一行,但查询不是基于 case_assign 的,而是基于 case_fields 的,这意味着我会收到一条错误消息,如“mysql 错误:返回的字段太多”或类似的东西。

所以我在想,有没有一种方法可以将为从 case_assign 表中获得的任何一个查询选择的总行数返回到一个将发送给客户端的数组中,然后我可能可以 json.parse() 它在客户端。

谢谢

最佳答案

SELECT cf.cfid, GROUP_CONCAT(u.fname) assignees
FROM case_fields cf
LEFT JOIN case_assign ca ON cf.cfid = ca.cfid
LEFT JOIN users u ON ca.uid = u.uid
GROUP BY cf.cfid

这将在 assignees 中创建一个以逗号分隔的用户名列表。您可以在客户端应用程序中将其拆分为一个数组。

或者您可以使用此查询:

SELECT cf.cfid, u.fname
FROM case_fields cf
LEFT JOIN case_assign ca ON cf.cfid = ca.cfid
LEFT JOIN users u ON ca.uid = u.uid
ORDER BY cf.cfid

然后当你遍历结果时,检查当前的 cfid 是否与前一个相同;如果是,将 fname 附加到受让人列表,否则在结果数组中开始一个新条目。

关于mysql - 在mysql中选择一个相对结果集作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202787/

相关文章:

mysql - SQL Null 作为 0 并使用 Left Join?

javascript - 在 Knex dateTime()/MySQL DATETIME 字段中存储 Node.js 日期

mysql - SQL语句: Insert On Key Update is not working as expected when primary key is not specified in the fields to insert

mysql - 查询更新问题

sql - 取消长时间运行的查询

mysql - 数据库中存储重复数据的正确方法

javascript - 当用户观看 mp4 视频时设置在线用户

php - MySQL查询以减少服务器负载

来自带有 IN 子句的两个表的 mysql 查询请求

mysql - 尝试优化查询并正确索引表