我有一个HTML表,它是从'user'表的查询中生成的,该表查找系统上的所有用户。
第二个查询使用“选择计数”通过检查用户ID在会议桌中出现的次数来计算用户预订的会议次数。
<cfquery datasource="iPad" name="Two">
SELECT COUNT(userID) AS meetingsCount from meeting where userID = '#One.userID#'
</cfquery>
我希望能够通过单击页面上的链接根据meetingsCount重新排序表。 问题是我不知道如何查询这些信息,因为它在MYSQL中的技术上并不存在。
编辑;使用左连接和验证的代码。
select user.userID, user.contactName, user.email, count(meeting.userID)
as meetingsCount
from user where user.userID = 30
AND user.userID NOT IN ('1', '2', '3', '4', '58', '59', '62',
'63', '64', '66', '69', '71', '72', '73', '78', '107')
AND SUBSTRING( meeting.meetingCode, 5, 2 )
BETWEEN 12 AND 22
AND SUBSTRING( meeting.meetingCode, 7, 2 )
BETWEEN 1 AND 12
AND SUBSTRING( meeting.meetingCode, 9, 2 )
BETWEEN 01 AND 31
left outer join meeting on user.userID = meeting.userID
答案 0 :(得分:6)
您应该使用group by
进行一次查询 编辑:我在您的回答中添加了您的where子句,但不是硬编码用户ID来排除您应该考虑将它们分配给角色,以便您可以在一个地方而不是每个查询中管理角色不包括这些人。如果您要求提供单个ID,也不需要not in
。我知道你现在只是陷入困境,但要牢记这一点。如果那还不行,我会检查你的子串逻辑。
<cfquery>
select
user.userID
, firstName
, lastName
, count(*) as meetingCount
from
user
left outer join meeting on users.userID = meeting.userID
AND ( SUBSTRING( meeting.meetingCode, 5, 2 ) BETWEEN 12 AND 22
AND SUBSTRING( meeting.meetingCode, 7, 2 ) BETWEEN 1 AND 12
AND SUBSTRING( meeting.meetingCode, 9, 2 ) BETWEEN 1 AND 31)
-- the ( ) above are optional but I like them to show groups of like filters
-- if you don't want to use them feel free not to.
where
user.userID NOT IN (1,2,3,4,5,59,62,63,64,66,69,71,72,73,78,107)
group by
user.userID
, firstName
, lastName
order by
meetingCount
</cfquery>
我认为MySql允许你通过别名来订购,我记不起来了。如果没有,请将订单更改为count(*)