gpt4 book ai didi

MySQL 查询 : Getting the most recent forum post

转载 作者:行者123 更新时间:2023-11-29 14:55:00 24 4
gpt4 key购买 nike

我正在为一个部门做一些工作,该部门在 MySQL 数据库中为其论坛设置了非常基本的表结构:

每个帖子都属于一个线程,每个线程属于一个类别。还有一个用于作者信息的用户表。

TABLE category:
id (int)
name (varchar)

TABLE thread:
id (int)
category_id (int)
user_id ((int)
title (varchar)
last_post (int) -- logs a unix timestamp of the last posts insertion

TABLE post:
id (int)
user_id (int)
thread_id (int)
post (longtext)
timestamp (int)

TABLE users:
id (int)
username (varchar)

我正在尝试创建一个页面,该页面将显示用户已在其中发布消息的所有线程(仅一次,因此如果用户已在线程中发布 3 次,它仍应仅在列表中显示一次)并且添加到每个线程的最新帖子。

所以这些是我要选择的字段:
类别名称
类别 ID
主题标题
线程ID
最近添加到该线程的消息的消息 ID
最近添加到该线程的消息的消息文本
最近添加到该线程的消息的作者的用户 ID
最近添加到该线程的消息的作者用户名
最近添加的消息的发布时间

它可以按线程的最近事件排序。

这可以在一个查询中实现吗?显然,简化此操作的一种方法是查询用户发布消息的所有线程,然后为每个线程发送单独的查询以获取最近添加的帖子信息..

谢谢!

最佳答案

未经测试,但应该可以:

SELECT DISTINCT
c.name
, c.id
, t.title
, t.id
, p.id
, p.post
, u.id
, u.username
, FROM_UNIXTIME(p.`timestamp`) AS postDate
FROM
category c
INNER JOIN thread t ON t.category_id = c.id
INNER JOIN post p ON p.thread_id = t.id
INNER JOIN users u ON u.id = p.user_id
INNER JOIN users u2 ON u2.id = p.user_id
WHERE
u2.id = userID_whose_threads_are_to_display
AND p.timestamp = (SELECT MAX(`timestamp`) FROM post WHERE post.thread_id = p.thread_id)
ORDER BY postDate DESC

请注意,恕我直言,将列命名为数据类型(在您的情况下为时间戳,这就是为什么我将其放在``中)是一个坏主意。

关于MySQL 查询 : Getting the most recent forum post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com