我怎样才能有效地查询'喜欢'来自MySQL的数据?

时间:2016-09-28 08:16:15

标签: mysql

我正在使用带有MySQL数据库的PHP后端开发社交网络iOS应用程序。我的数据库中有3个表来存储帖子,评论和喜欢。

目前,该应用一次最多请求50个帖子,其中包含各种特定数据。我使用MySQL的SELECT查询来完成此操作。我的喜欢'存储在' Likes表中'如同每行一样。这包括用户名和他们喜欢的帖子。

当应用程序刷新时,我需要收集“喜欢”这些内容。刚刚加载的帖子的数据。我的问题是我不知道查询MySQL以返回该用户的所有相关喜欢的最佳方式。这意味着当我加载一些帖子时,我希望用户看到他们已经喜欢哪些帖子。

以下是我的问题的直观描述: Here is a visual description of my problem

请理解,这些帖子中最多可同时显示50个。

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,根据您的项目,您可能希望优化我的答案。

我认为您的Likes表的结构为(int) id, (int) user_id, (int) post_id

要直接回答您的问题(关于仅针对刷新进行查询),下一个MySQL查询将为您提供用户喜欢的post_id列表。您需要将%user_id%替换为用户的ID,将%post_ids%替换为50个帖子ID的列表,用逗号分隔:

SELECT post_id
FROM Likes
WHERE user_id = %user_id% AND
      post_id IN (%post_ids%)

但是,如果刷新意味着整个页面(而不仅仅是AJAX请求等),我会考虑直接在获取帖子的查询中实现它。例如:

SELECT p.id, p.content, p...., l.id AS `Liked`
FROM Posts AS p
LEFT JOIN Likes AS l
       ON p.id = l.post_id AND
          l.user_id = %user_id%  
WHERE ... 

还请考虑在右栏添加索引。

答案 1 :(得分:0)

正如所承诺的,我的解决方案就在这里:

SELECT `posts`.`postnumber`, `posts`.`message`, `likes`.`didLike`
FROM `posts`
LEFT JOIN `likes`
ON `posts`.`postnumber`=`likes`.`post_id`
AND `likes`.`user_id`='USERNAME';