我需要解决一个问题,但我甚至不知道该怎么问,所以很抱歉得到这个标题。
请耐心等待,努力理解,谢谢。
我有这些表格和相应的字段:
users-用户列表
user_id | user_name (...)
classes-类别列表
class_id | class_name (...)
帖子-帖子列表
post_id | post_title (...)
uclass-这个表有每个用户可以访问的类的列表
uclass_id | class_id | user_id
pclass-该表列出了每个类都可以访问的帖子
pclass_id | post_id | class_id
用户可以访问多个类。Posts可以由几个类访问。
所以我需要得到用户可以访问的帖子列表。当用户可以访问一个类,而这个用户可以访问帖子时,就会发生这种情况。
我试着使用LEFT JOIN来实现这一点,问题是因为用户可以访问几个类,而几个类可以访问同一个帖子,结果是一些帖子出现了好几次。
在没有重复结果的情况下,最好的方法是什么。
我希望你能理解我的需要。
非常感谢。
编辑
我尝试了很多方法,这是一个:
SELECT * FROM post
LEFT JOIN pclass ON post.post_id = pclass.post_id
LEFT JOIN uclass ON uclass.user_id = 'USERDEMOUSER'
WHERE uclass.class_id = pclass.class_id
我知道少了一些东西,但我找不到它是什么…或者也许应该用完全不同的方式来做!
谢谢。
尝试
SELECT * FROM post
LEFT JOIN pclass ON post.post_id = pclass.post_id
LEFT JOIN uclass ON uclass.class_id = pclass.class_id
WHERE uclass.user_id = 'USERDEMOUSER'
我找到了解决方案,它是:
SELECT DISTINCT post.post_id (etc.)
这将类似于GROUP BY,但方式更好。
谢谢大家。