gpt4 book ai didi

php - MySQL:通过用户ID获取常用记录

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

我不得不认为这是一个相对简单的查询,但我被难住了。我有一个成就表、一个用户表和一个 users_achievements 表。我想根据 users_achievements 表中存在的内容确定多个用户共享的共同成就。

SELECT a.id, a.name, a.description, a.badge_path, b.earned_on 
FROM achievements AS a
LEFT JOIN users_achievements AS b ON a.id=b.achievements_id
WHERE b.users_id=1
AND b.users_id=2

即使 ID 为 1 和 2 的用户根据 achievements_id 共享 users_achievements 表中的两条公共(public)记录(因此总共有 4 条记录——每个用户对应一个 achievement_id),这不会返回任何结果。如果我使用“OR”或“IN”,我会得到记录,但这不包括两个 ID,只是...我需要查询来限定两个 ID。

最佳答案

这是一种方法:

SELECT a.id, a.name, a.description, a.badge_path, ua.earned_on
FROM achievements a JOIN
users_achievements ua
ON a.id = ua.achievements_id
WHERE ua.users_id IN (1, 2)
GROUP BY a.id, a.name, a.description, a.badge_path, ua.earned_on
HAVING count(distinct ua.users_id) = 2;

注意以下几点:

  • 表格别名缩写。这使查询更易于阅读。
  • left join 应该是不必要的。有了这样的表结构,外键关系应该匹配。
  • WHERE 子句仅针对这两个用户进行过滤。
  • HAVING 子句保证两者都出现在结果中。

关于php - MySQL:通过用户ID获取常用记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273818/

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