扩展mySQL查询以包含更多内容

扩展mySQL查询以包含更多内容,sql,mysql,drupal,Sql,Mysql,Drupal,我有一个MySQL查询,它选择当前用户的朋友创建的内容,并按时间倒序列出这些内容 SELECT node.nid AS nid, node.created AS node_created FROM node node LEFT JOIN user_relationships user_relationships ON node.uid = user_relationships.requestee_id LEFT JOIN users users_user_relations

我有一个MySQL查询,它选择当前用户的朋友创建的内容,并按时间倒序列出这些内容

    SELECT node.nid AS nid,
   node.created AS node_created
 FROM node node 
 LEFT JOIN user_relationships user_relationships ON node.uid = user_relationships.requestee_id
 LEFT JOIN users users_user_relationships ON user_relationships.requestee_id = users_user_relationships.uid
 WHERE (node.status <> 0) AND (node.type in ('drigg', 'blog_post')) AND (user_relationships.requester_id = 1)
   ORDER BY node_created DESC
如何展开此查询,使其除了列出节点外还列出注释

下面是注释表的结构:

cid注释ID 发布评论的用户的uid ID 时间戳使用相同的UNIX日期 将格式设置为“创建的节点”列 从上面的节点表开始 因此,现在查询将获取当前用户的好友编写的所有节点。我希望它也能抓取与当前用户是好友的人写的所有评论。然后我想根据创建日期按描述顺序列出这些节点和注释


似乎我需要在select语句中添加更多内容,但我不确定是什么。

您可以使用UNION ALL组合两个查询的结果:

SELECT nodeid, commentid, created FROM (
    SELECT node.nid AS nodeid, NULL as commentid, node.created AS created
    FROM node node 
    LEFT JOIN user_relationships user_relationships ON node.uid = user_relationships.requestee_id
    LEFT JOIN users users_user_relationships ON user_relationships.requestee_id = users_user_relationships.uid
    WHERE (node.status <> 0) AND (node.type in ('drigg', 'blog_post')) AND (user_relationships.requester_id = 1)
    UNION ALL
    SELECT NULL as nodeid, comment.cid AS commentid, comment.timestamp AS created
    FROM node node 
    LEFT JOIN user_relationships user_relationships ON node.uid = user_relationships.requestee_id
    LEFT JOIN users users_user_relationships ON user_relationships.requestee_id = users_user_relationships.uid
    WHERE (node.status <> 0) AND (node.type in ('drigg', 'blog_post')) AND (user_relationships.requester_id = 1)
)
ORDER BY created DESC
因此,现在查询将获取当前用户的好友编写的所有节点。我希望它也能抓取与当前用户是好友的人写的所有评论。然后我想根据创建日期按描述顺序列出这些节点和注释

使用:

那太好了


表别名与表名相同或长于表名本身没有多大意义。

您只选择了两列node.nid和node.created。您是否希望将此选择增加到三列:node_id、comment_id、created,其中每行仅设置node_id、comment_id中的一列?与节点和注释关联的其他数据(如文本正文)如何?你不也去拿吗?或者你是在一个单独的查询中获取的?我们也可以获取这些东西。我只是想让我的问题简单一些。我想,如果我能得到一个节点和注释ID的列表(按相反的时间顺序排列),那么我就能找出如何将它们转换成完整的故事和注释。我不想问一些如此棘手的问题,以至于没有人回答。@bflora:听到这个我很高兴。我担心您只会返回所有ID,然后通过循环和进行新查询来获取其余数据。保持问题的简单是一件好事,但我总是好奇地想知道更多关于问题背后的背景知识,以确保没有更简单的方法来解决问题,这就是为什么我问这个问题。@bflora:我也想通过对一个节点进行两个独立的有序查询来解决这个问题,一个用于评论和在客户端合并结果。您是否考虑过这种方法是否可行?它可能更简单、更干净——您可以将现有类重新用于注释和节点,并且结果集中不会有大量空值。当然,缺点是到服务器的额外往返。不幸的是,这有点超出我的理解。目前,我打赌我将能够想出如何添加分页和其他Drupal-y位。问你们是否想跳转到IRC来处理这个问题,这是否符合犹太教教义?对于不必要的表别名,这是一个很好的观点。如果我理解你的查询,我想它只会列出用户在他们创建的节点上的注释。也许bflora也希望用户在他们没有创建的节点上发表评论?我不知道drupal,所以我不知道这是否可能。Mark是正确的。我想将注释与此查询中的节点分离。我想要一个由当前用户的好友创建的最新评论和节点的列表。通过这种方式,用户可以看到他的好友发布和评论的内容,并可以找到新的内容。在Drupal的Views模块中浏览之后,它似乎无法返回同一查询中的注释和节点列表,因此滚动一个自定义查询。Drupal非常擅长让您列出节点。我希望我能在同一个查询中包含从上下文中删除的注释。根据澄清进行更新。
   SELECT n.nid,
          COALESCE(c.timestamp, n.created) AS coalesced_timestamp,
          c.comment
     FROM NODE n
LEFT JOIN USER_RELATIONSHIPS ur ON ur.requestee_id = n.uid
LEFT JOIN USERS u ON u.uid = ur.requestee_id
LEFT JOIN COMMENT c ON c.uid = u.uid
                   AND c.nid = n.nid
    WHERE n.status <> 0 
      AND n.type in ('drigg', 'blog_post') 
      AND ur.requester_id = 1
 ORDER BY coalesced_timestamp DESC