【问题标题】:Select posts with user info and media选择包含用户信息和媒体的帖子
【发布时间】:2019-07-19 07:50:41
【问题描述】:

我需要做以下事情:

  • 在帖子表中选择最新的帖子(例如最后 10 个)
  • 加入用户表中的用户信息
  • 在 type = avatar 和 media_author = user.id 的媒体表中加入用户的媒体头像
  • 加入帖子的媒体(每个帖子从 1 到 4 个)

接下来我需要过滤朋友的帖子并使用检索数据的用户的首选主题标签发布。我认为所有这些都不能在一个查询中完成,对吧?

在最终的解决方案中我需要:

  • 获取帖子
  • 根据某些规则对帖子进行评分和排序(是朋友吗?有标签吗?等等)
  • 为订购的帖子提供用户信息和帖子信息(如计数等)

也许更好的解决方案是: 只选择帖子,并为每个帖子做两次查询以检索用户和媒体数据?

现在这是我用于单个帖子的查询:

SELECT posts.id, posts.user_id, posts.privacy, posts.type, posts.published, posts.language, 
       posts.content, posts.date, posts.entity_map, users.username, media.media_url 
  FROM posts 
  LEFT JOIN (SELECT * FROM users) users 
         ON (users.id = posts.user_id ) 
  LEFT JOIN (SELECT * FROM media ORDER BY media.id DESC) media 
         ON (media.media_author = posts.user_id AND media.media_type = 'avatar') 
  WHERE posts.id = ?

SELECT * FROM media WHERE media_parent = ?

执行 20 次查询来检索 10 个帖子的列表是否有意义?

这里是表格结构:

tbl posts

id
content 
date
entity_map
language
privacy 
published
raw_content
type
user_id
tbl users

id
name
username
tbl media

id
media_author
media_date
media_parent
media_status
media_type
media_url
tbl like/love

te be defined, but I think a table with:
id
id_from
id_to
type (like/love/other)

【问题讨论】:

  • 你能分享一下数据库结构吗? @red
  • 当然,这里的表格结构:``` tbl 帖子 id 内容日期 entity_map 语言隐私已发布 raw_content 类型 user_id `` tbl 用户 id 名称用户名` ` tbl 媒体 id media_author media_date media_parent media_status media_type media_url ` ` tbl like/love te 被定义,但我精简了一个表格:id id_from id_to type (like/love/other) `我将它发布在一个答案中以获得更好的格式

标签: mysql node.js lambda aws-lambda


【解决方案1】:

这将为您提供最新的 10 个帖子。

SELECT posts.id, posts.user_id, posts.privacy, posts.type, posts.published, posts.language, 
       posts.content, posts.date, posts.entity_map, users.username, media.media_url 
  FROM posts 
  LEFT JOIN (SELECT * FROM users) users 
         ON (users.id = posts.user_id ) 
  LEFT JOIN (SELECT * FROM media ORDER BY media.id DESC) media 
         ON (media.media_author = posts.user_id AND media.media_type = 'avatar') 
  Order By post.date desc
  limit 10

要获取媒体,您必须对每个帖子进行查询。因为,sql不像mongodb那样方便引用。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2015-01-15
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多