Table 特色结构 post / 特色文章等

Table structure for featured post / featured article etc

我想问一下实现特色 post 或特色文章的合适方法是什么。在某些博客中,您根据自己的选择将 post 设置为特色,现有列表中的最后一个将被替换;我也想这样做。

假设我有一个名为 帖子 的 table,其中包含以下列:post_id、post_message、post_date、user_who_posted、类别(即艺术、电影)。

我在这两个想法之间做出选择,但它们可能不合适:

  1. 在标题为 "Type" 的同一 table 上创建一个列,其值为 为空或精选。
  2. 在同一个 table 标题上创建一个列 "Featured" 值为 1 或 0。

如果以上两者之一合适,它会 post 有点进退两难,因为在某些情况下,我可能希望将较旧的文章放在精选文章的第一位列出较新的。如果是这样,创建另一列来跟踪我将它们设置为特色的日期和时间是否有意义?将会发生的情况是,我会将较旧的文章再次精选或最后精选在列表的顶部。

这两种方法都不推荐。

如果您创建一个名为 Type 的列,它将变得不明确并且值难以跟踪。
如果您创建一个名为 Featured 的列,该列具有明确定义的含义,但值不是很有用。为什么是 0 或 1?

此类要求中的最佳选择是创建一个名为 Featured 且类型为 Datetime 的列并使其可为空。如果该值为 NULL,那么您知道 post 不是特色。如果有多个 post 被推荐,您可以只显示最近被推荐的。如果您需要将较旧的精选 post 放在最上面,只需给它一个新的日期。

"Appropriate" 是主观的,但如果您想要一种快速简便的方法,您可以在 posts table 中添加另一个名为 featured_order 的属性这将是一个整数,然后您可以根据 post 是否为 featured 进行查询,并根据 featured_order 属性进行排序。

类似于:

SELECT * FROM `posts` WHERE `featured` = 1 ORDER BY `featured_order` ASC;

请注意 featured_order 应该可以为空。

然后您可以将较旧的 post 设置为比较新的 post 更低的 featured_order,后者也有特色,但具有更高的 featured_order 值。

希望这是有道理的。

我更喜欢使用整数来实现此类功能的原因是,与 DATETIME 属性相比,(对我们人类而言)更容易找出顺序中的 higher/lower,并且设置顺序是也更容易。

都不是 -- 再做一个 table。

此 table 将有一个 link 特色文章,加上订购信息,但除此之外别无其他。

这样,所有对 "featured" 的操作都在这个额外的 table 中,并且只在这个额外的 table.