mysql - 加入两个表并获得一个的计数,但所有结果都匹配另一个上的 ID
问题描述
这听起来有点令人困惑,但实际上很容易。
在一张表中,我存储事件(如派对)。
例子:
用户身份 | 事件名称 | 事件ID |
---|---|---|
10 | 酷事件 | 0 |
10 | 平庸事件 | 1 |
另一张桌子储存了参加那个聚会的邀请。这些可以具有不同的状态,例如“接受”或“主机”(或“拒绝”等)。
例子:
事件ID | 地位 |
---|---|
0 | 公认 |
0 | 主持人 |
0 | 拒绝 |
基本上,我需要从一个 USERID 获取所有事件,但我还想知道有多少人接受了该事件或者是主持人。
因此,如果我想找出 ID 为 10 的用户有哪些事件,结果应该是:
{事件 ID:0,事件名称:CoolEvent,计数(状态 == 接受或主机):2}
{事件 ID:1,事件名称:MediocreEvent,计数(状态 == 接受或主机):0}
所以总共有两个结果。
这必须在一个查询中发生。
你能帮我吗?
我试过了:
var sqlString = "SELECT a.name, a.venueAdresse, a.userID, a.tblEventID, a.venueCity, a.startTimeAndDateUnixTicks, a.displayStartTime, a.slots, a.eventPictureThumb, COUNT(b.status) \
FROM 10561_12865_tblEvents a \
RIGHT JOIN 10561_12865_tblInvites b ON (a.tblEventID = b.tblEventID) \
WHERE a.userID = '" + userID + "'\
AND (b.status = 'accepted' OR b.status = 'host') \
ORDER BY createdUnixInt DESC \
LIMIT " + start + "," + count
但这只会返回 ID 匹配且状态被接受或托管的结果,但我只想计算一张表中的出现次数。所以基本上 AND 只是指计数属性。
所以我有点卡在这里。
解决方案
最简单的方法是使用相关子查询:
SELECT e.name, e.venueAdresse, e.userID, e.tblEventID, e.venueCity, e.startTimeAndDateUnixTicks, e.displayStartTime, e.slots, e.eventPictureThumb,
(
SELECT COUNT(*)
FROM `10561_12865_tblInvites` i
WHERE i.tblEventID = e.tblEventID AND (i.status = 'accepted' OR i.status = 'host')
) counter
FROM `10561_12865_tblEvents` e
WHERE e.userID = ?
ORDER BY e.createdUnixInt DESC
LIMIT ?
?
用您传递的参数替换占位符。
推荐阅读
- java - 为什么 CriteriaQuery 上的左连接不过滤结果?
- reactjs - ReactJS 元素未显示在我正在处理的网站上
- php - 无法使用 AWS SES 发送邮件
- java - jingle IQ中的payload-type标签是什么意思?
- python - 如果我多次使用,为什么 readlines() 会超出索引范围?
- c# - 在 C# 中处理 HTTP 响应的框架
- r - kableExtra:调整 add_header_above() 的字体和背景
- python - Python 浮动和替换多个
- angular - 降级 Angular 版本,而不仅仅是 Angular cli
- c# - 使用 EFCore 拦截器实现行级安全