2016-09-28 28 views
-3

我正在开发一个使用PHP后端和MySQL数据库的社交网络iOS应用程序。我在我的数据库中有3个表来存储帖子,评论和喜欢。我如何有效地查询MySQL的“喜欢”数据?

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

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

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

请理解了这些职位的50将在同一时间显示。

+0

请添加您的表定义和你试过SELECT查询。 – MichielB

+0

不要显示图片,用索引显示表格定义 –

回答

0

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

我假设你的Likes表的结构为(int) id, (int) user_id, (int) post_id

要直接回答您的问题(关于仅为刷新执行查询),下一个MySQL查询将为您提供用户喜欢的post_id的列表。您需要由用户和%post_ids%由50个员额ID列表的ID,用逗号隔开,以取代%user_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 ... 

也请考虑在右列添加索引。

+0

非常感谢。你给的第二块代码非常有帮助。一旦我实施并测试,我会更新! – Ollie

+0

再次感谢,我在下面添加了我的解决方案:) – Ollie

0

正如所承诺的,我的解决办法是在这里:

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