Mysql:从多个表中获取数据

标签 mysql

我有 4 张 table 。

帖子:id、标题

标签:id、名称

post_tag:id、post_id、tag_id

user_read_activity:id、user_id、post_id

User_read_activity 包含用户已阅读的帖子。 Post_tag 包含链接到标签的帖子。一篇帖子可以有多个标签。我需要根据用户关注的某些标签来获取用户未读的帖子,并删除用户可能不喜欢的某些帖子。

我想出了这段代码。但这是错误的。这也为我提供了用户阅读的帖子。但根据标签,这些是正确的。只需要更正未读部分即可。请帮我解决这个问题。

如果代码有任何错误,请帮助我更正代码。

SELECT DISTINCT post.* FROM post 

INNER JOIN post_tag ON post.id = post_tag.post_id 

INNER JOIN tag 

WHERE tag.id = 21 OR tag.id = 26 OR tag.id = 63 OR tag.id = 86 OR tag.id = 11 

AND post.id != 1088 AND post.id != 338 AND post.id != 1396 

AND post.id NOT IN (SELECT post_id from user_read_activity WHERE user_id = 70)  

ORDER BY post.likes DESC LIMIT 5

最佳答案

您只需将条件括起来即可明确优先顺序。您还应该在 post_tag 和 tag 之间建立适当的连接:

SELECT DISTINCT post.* FROM post 

INNER JOIN post_tag ON post.id = post_tag.post_id 

INNER JOIN tag ON post_tag.tag_id = tag.id

WHERE (tag.id = 21 OR tag.id = 26 OR tag.id = 63 OR tag.id = 86 OR tag.id = 11)

AND post.id != 1088 AND post.id != 338 AND post.id != 1396 

AND post.id NOT IN (SELECT post_id from user_read_activity WHERE user_id = 70) 

ORDER BY post.likes DESC LIMIT 5

或者,@dimwittedanimal 建议的 IN 标准也可以。

SELECT DISTINCT post.* FROM post 

INNER JOIN post_tag ON post.id = post_tag.post_id 

INNER JOIN tag ON post_tag.tag_id = tag.id

WHERE tag.id IN (21, 26, 63, 86, 11)

AND post.id NOT IN (1088, 338, 1396)

AND post.id NOT IN (SELECT post_id from user_read_activity WHERE user_id = 70) 

ORDER BY post.likes DESC LIMIT 5

关于Mysql:从多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718781/

相关文章:

php - PDO Int 占位符在它们周围获取引号

php - 数据库中的图像链接插入无需\

php - 需要一些 PHP 逻辑来遍历一些 mysql 数据库结果

mysql - 我可以将 MySQL 中的外连接的空值替换为文本吗

mysql - 如何通过网络对密码进行哈希和加密?

mysql - 编译错误mysql.h未找到

mysql - Yii2 合并查询,如 yii1 中的 cdbcriteria

mySQL 错误 #1054 为什么我的内部联接不起作用? (新秀级别)

mysql - 使用给定 2 之间的随机值(带小数)更新 mySQL 列

mysql - 使用 sql 将一些列值放入新列中