【问题标题】:mysql join two tables likes and postsmysql加入两个表like和posts
【发布时间】:2012-12-25 21:55:36
【问题描述】:

这是我的 php/MySQL 任务:

我有一个表POSTS,其中包含作为主键的num 字段和有关帖子的其他信息字段(author、title 等)。我还有一个表LIKE,其中包含一个作为主键的userId 字段和一个与num 中的num 字段对应的字段POST。给定一个特定的userID,我需要从POSTS 表中获取userId“喜欢”的所有行。

表 1 - 帖子

-数字
-作者
-标题

表 2 - 喜欢

-用户ID
-postId


这一切都在 php 中,所以我的第一个想法是从LIKES 表中获取所有行,其中userId 与给定的行匹配,并将这些行存储在一个数组中。然后我会遍历数组,对于每一行我会搜索得到POSTS 表where postId=POSTS.num 的行。但是,这似乎会相当慢,特别是因为通过数组的每次迭代都是一个单独的 mysql 查询。

我假设有更快的方法。是使用临时表还是有更好的方法来连接表?我必须假设两个表都包含很多行。我是 mysql 新手,所以如果有更好的解决方案,请解释为什么它更好。提前感谢您的帮助!

【问题讨论】:

    标签: php mysql join mysqli


    【解决方案1】:

    尝试以下查询:

    SELECT
      `posts`.*
    FROM
      `likes`
    INNER JOIN
      `posts` ON
      `posts`.num = `likes`.postId
    WHERE
      `likes`.Userid = {insert user id here}
    

    根据您的架构(不确定“喜欢”中的每条记录是否必须是唯一的,您可能希望在您的选择中使用 DISTINCT 关键字来过滤掉重复项。

    【讨论】:

      【解决方案2】:
      SELECT poli.* FROM (
      SELECT po.* FROM posts po 
      JOIN likes li
      ON li.postId = po.num
      WHERE li.userId = '$yourGivenUserId'
      ) AS poli
      

      $yourGivenUserId 是给定的 userId。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-22
        • 2011-01-24
        • 2014-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        相关资源
        最近更新 更多