【发布时间】:2010-01-03 00:41:39
【问题描述】:
我有一个 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
我如何“扩展”这个查询,以便它列出除了节点之外的 cmets?
这是评论表的结构:
- cid(评论 ID)
- uid(发表评论的用户 ID)
- 时间戳(使用相同的 UNIX 日期 格式为“节点创建”列 从上面的节点表)
所以现在查询会抓取当前用户的好友所写的所有“节点”。我希望它还可以获取当前用户的好友编写的所有 cmets。然后我想根据它们的创建日期按 DESC 顺序列出这些节点和 cmets。
看来我需要在我的 select 语句中添加更多内容,但我不确定是什么。
【问题讨论】:
-
您只选择了两列(node.nid、node.created)。我是否希望将此选择增加到三列:(node_id,comment_id,created)对于每一行,只有一个(node_id,comment_id)设置?与节点和评论相关的其他数据,例如文本正文呢?你不应该也拿那个吗?还是您在单独的查询中获取它?
-
我们也可以获取这些东西。我只是想让我的问题简单。我想如果我能得到一个节点和评论 ID 的反向时间顺序列表,那么我就可以弄清楚如何将它们变成完整的故事和 cmets。不想问这么棘手的问题,没有人回答。
-
@bflora:我很高兴听到这个消息。我担心你只会返回所有 id,然后通过循环和进行新查询来获取其余数据。让问题保持简单是一件好事,但我总是很想知道更多关于问题背后的背景,以确保没有更简单的方法来解决问题,这就是我问的原因。
-
@bflora:我也很想通过创建两个单独的有序查询(一个用于节点,一个用于 cmets)并在客户端合并结果来解决这个问题。您是否考虑过这种方法是否可行?它可能更简单、更清晰——您可以为 cmets 和节点重用现有的类,并且结果集中不会有大量的 NULL。缺点当然是到服务器的额外往返。
-
好吧,这有点超出我的想象,不幸的是。目前,我在赌我将能够弄清楚如何为此添加分页和其他 Drupal-y 位。问你是否愿意加入 IRC 来做更多的工作?