gpt4 book ai didi

MySQL 不是预期的输出 - YEAR() 不起作用

转载 作者:行者123 更新时间:2023-11-29 13:17:11 24 4
gpt4 key购买 nike

我的查询存在问题,该查询未输出我期望的内容,并且无法使其正常工作。

查询是

SELECT COUNT(event_type_id), userprofiles.id as userprofile_id, users.first_name, users.last_name 
FROM users, userprofiles
LEFT JOIN event_matches ON event_matches.userprofile_id = userprofiles.id
AND event_type_id = 1
LEFT JOIN activities ON activities.id = event_matches.activity_id
AND YEAR(activities.start) = 2012
WHERE userprofiles.home_id = 2
AND users.id = userprofiles.user_id
GROUP BY userprofiles.id
ORDER BY COUNT(event_type_id) DESC

但是当我运行这个查询时,它会获取所有事件,而不仅仅是 2012 年的事件,看起来 LEFT JOIN 做了一些事情。如果我不使用 LEFT JOIN 而是使用 JOIN,则查询可以工作,但是我只能得到 2012 年 event_type_id = 1 的用户。但是我使用 LEFT JOIN 的原因是因为我想拥有所有用户,而且不仅仅是那些拥有 event_type_id 的人。

希望有人能看到我的错误并帮助我。

最佳答案

那又怎样——用英语你想得到...例如:对于 home_id = 2 的所有用户配置文件,2012 年中有多少类型 1 的事件。通过执行左连接,你是说我想要所有配置文件无论是否参加类型 1 的事件,Home_ID = 2 的值都相同。如果是这种情况,您可能希望将它们从 LEFT JOIN 更改为仅 JOIN (INNER JOIN)

这适用于所有用户配置文件,无论 2012 年内是否存在类型 1 的实际事件,这只关心是否找到类型 1 的事件

SELECT 
COUNT(event_type_id),
userprofiles.id as userprofile_id,
users.first_name,
users.last_name
FROM
userprofiles
JOIN users
ON userprofiles.user_id = users.id
LEFT JOIN event_matches
ON userprofiles.id = event_matches.userprofile_id
AND event_matches.event_type_id = 1
LEFT JOIN activities
ON event_matches.activity_id = activities.id
AND YEAR(activities.start) = 2012
WHERE
userprofiles.home_id = 2
GROUP BY
userprofiles.id
ORDER BY
COUNT(event_type_id) DESC

通过更改为细粒度事件表,您将得到事件类型计数 = 1 并且年份为 2012 年

SELECT 
COUNT(activities.id),
... rest of query...
ORDER BY
COUNT(activities.id) DESC

如果您只想要那些在 2012 年实际发生过类型 1 事件的个人资料,请更改为 JOIN

SELECT 
COUNT(event_type_id),
userprofiles.id as userprofile_id,
users.first_name,
users.last_name
FROM
userprofiles
JOIN users
ON userprofiles.user_id = users.id
JOIN event_matches
ON userprofiles.id = event_matches.userprofile_id
AND event_matches.event_type_id = 1
JOIN activities
ON event_matches.activity_id = activities.id
AND YEAR(activities.start) = 2012
WHERE
userprofiles.home_id = 2
GROUP BY
userprofiles.id
ORDER BY
COUNT(event_type_id) DESC

关于MySQL 不是预期的输出 - YEAR() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com