dongle0396 2015-02-24 01:27
浏览 28

从两个表中选择并从两个“朋友列表”中进行检查

Background info - I have 4 tables in total.

  • Posts - Posts from normal users
  • Group posts - Posts from groups
  • Friends list - Stores friendships
  • Group memberships - Stores group memberships

What I'm trying to achieve is: the page will list all posts from yourself, your friends and the groups you join.

(Previous query) - Posts & Group posts were in the same table, and identified by the 'type' field

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

Previously, I had posts and group_posts in the same table. But now, I think they should be in two different tables.

(NEW query) - Where posts and group posts are in separate tables

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

The results I'm getting is the entire row filled with the same post from my group_posts.

Also, my ids in both posts & group_posts are not in sequence i.e. posts may have 100 posts, but group_posts may only have 30.

What is wrong?

  • 写回答

1条回答 默认 最新

  • duaiwu8385 2015-02-24 01:44
    关注

    Try this:

    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;
    

    Note switching DISTINCT to GROUP BY to group by each post.

    评论

报告相同问题?

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢