php - 从两个表中选择并从两个表中检查 'Friend lists'

标签 php mysql union

背景信息 - 我总共有 4 张 table 。

  • 帖子 - 来自普通用户的帖子
  • 群组帖子 - 来自群组的帖子
  • 好友列表 - 存储好友
  • 群组成员身份 - 存储群组成员身份

我想要实现的是:该页面将列出您自己、您的 friend 以及您加入的群组的所有帖子。

(上一个查询)- 帖子和群组帖子位于同一个表中,并由“类型”字段标识

SELECT
      DISTINCT p.id,
      p.type, 
      p.user1, 
      p.user2, 
      p.content, 
      p.timestamp,
      p.comments
FROM posts p, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
       p.user1 = 'MY ID' OR 
      (p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, DESC LIMIT 10

以前,我在同一个表中有 posts 和 group_posts。但现在,我认为它们应该位于两个不同的表中。

(新查询)- 帖子和群组帖子位于单独的表中

SELECT 
      DISTINCT p.id, 
      p.type, 
      p.user1, 
      p.user2, 
      p.content, 
      p.timestamp, 
      p.comments, 
      gp.id, 
      gp.type, 
      gp.user1, 
      gp.user2, 
      gp.content, 
      gp.timestamp, 
      gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR 
       p.user1 = 'MY ID' OR 
      (p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10

我得到的结果是整行都充满了我的 group_posts 中的相同帖子。

此外,我在 posts 和 group_posts 中的 ID 不按顺序排列,即 posts 可能有 100 个帖子,但 group_posts 可能只有 30 个。

出了什么问题?

最佳答案

试试这个:

SELECT 
      p.id, 
      p.type, 
      p.user1, 
      p.user2, 
      p.content, 
      p.timestamp, 
      p.comments, 
      gp.id, 
      gp.type, 
      gp.user1, 
      gp.user2, 
      gp.content, 
      gp.timestamp, 
      gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR 
       p.user1 = 'MY ID' OR 
      (p.user1 = g.group_id AND g.user = 'MY ID')

GROUP BY p.id
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10;

注意将 DISTINCT 切换为 GROUP BY 以按每个帖子进行分组。

关于php - 从两个表中选择并从两个表中检查 'Friend lists',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28686763/

相关文章:

php - 父子同 table

mysql:添加两个不同表的 Sum()

php - 我如何在 Code Igniter 中使用 Symfony 或 Zend 组件?

php - 使用PHP在while循环中使用动态输入字段数组更新MYSQL数据库

php - 如何在laravel http客户端api调用中分离基本URL和端点?

php - 使用其他网络帐户登录帐户实现

java - SQL 注入(inject)从 Hibernate HQL 到 MySQL 的删除/删除

php - 不显眼的自托管评论功能可放置到现有网页上

sql - 执行此查询的最佳方式是什么?也许是联盟

.net - Union、Intersect 和 Except 的非 LINQ 实现