【问题标题】:How to select and sort data with a parent / child relationship如何选择和排序具有父/子关系的数据
【发布时间】:2013-07-04 06:59:21
【问题描述】:

我正在为具有父/子关系的论坛存储线程,如下所示:

CREATE TABLE forum_threads (
  thread_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  parent_id INTEGER UNSIGNED NOT NULL DEFAULT 0,
  topic_id INTEGER UNSIGNED NOT NULL,
  user_id INTEGER UNSIGNED NOT NULL,
  title VARCHAR(100) NOT NULL,
  body TEXT NOT NULL,
  create_date DATETIME NOT NULL,

  PRIMARY KEY (thread_id),
  FOREIGN KEY (parent_id)
    REFERENCES forum_threads(thread_id),
  FOREIGN KEY (topic_id)
    REFERENCES forum_topics(topic_id),
  FOREIGN KEY (user_id)
    REFERENCES users(user_id)
);

新线程有parent_id = 0,而回复有parent_id = the thread_id being replied to

我想选择最近更新(回复)的线程并将结果显示在一个表格中,如下所示:

我该怎么做?

SELECT * FROM forum_threads
WHERE topic_id = whatever AND parent_id = 0
WHAT NEXT???

我不确定这是否可以使用纯 SQL 来完成,或者我是否应该使用 PHP 来处理结果,或者我是否应该一起尝试另一种方法?

【问题讨论】:

标签: php mysql forum


【解决方案1】:

使用以下查询:

SELECT * FROM forum_threads
     WHERE topic_id = whatever AND parent_id = 0
     ORDER BY updated_date DESC limit 1;

这将为您提供最新的记录。

【讨论】:

  • @mistermartin 来自您在结果中显示它的位置。它将在您的数据库中。这只是我的豁免。如果您已创建日期,则可以按该字段排序。这是一个表字段名称。
  • updated_date 不在我的表中。我不想简单地通过create_date 订购。请重新阅读问题。
【解决方案2】:

您可以在 SQl 中简单地做到这一点

SELECT ft.* FROM  forum_threads AS ft
JOIN forum_threads AS ft1 ON ft.id = ft1.thread_id
WHERE topic_id = whatever AND parent_id = 0
ORDER BY ft.create_date DESC
LIMIT 1

【讨论】:

  • 你现在能看看吗。 ft.thread_id 改为 ft1.thread_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2018-02-12
  • 1970-01-01
  • 2011-04-05
  • 2021-12-30
  • 2023-02-05
  • 2012-10-15
相关资源
最近更新 更多