0

好的,所以我到处都在寻找如何对具有某种任意值的分层数据进行排序/排序,例如按字母顺序排列、最高票数等。你们中的任何人都对嵌套集或其他东西有任何解决方案吗?

这是一个人在我的线程中在 reddit 上提出的几个示例查询,我添加到(联合了很多选择.. 帮助?):

http://sqlfiddle.com/#!9/6dd457/10 - 按字母顺序排列,仍然按顺序 http://sqlfiddle.com/#!9/786d89/36 - 按最高票数排序

这些本质上是邻接列表,mysql会根据您的排序参数动态创建一个物化路径。这将在每次有人访问 viewtopic.php 时生成,因为每个用户都有自己的自定义排序。

现在这种方法存在一些问题。首先,看到所有这些选择和加入让我有点担心。我认为有一种更优化的方式来完成这一切。

php 可以用来计算最高的父节点值,我们想要从中生成多少层,以及其他一些东西的格式,但是这个废话也有问题:

(1000 - l1.TotalVotes)+(2 * l1.Negatives) - 必须在整个查询中重复 5 次

我试图在其受人尊敬的选择查询中执行 ((1000 - l1.TotalVotes)+(2 * l1.Negatives)) AS l1.Votes,但我得到了一个错误:/这将是使它更清洁的一步。

我的最终目标是创建一个能够按我想要的顺序排序的查询,所以我可以只使用带有深度信息的模板来生成 html,而不必使用 php,因为 sql 更多高效且适用于这类事情。我主要担心看起来像这样的查询对于较大的站点会不利。

最终目标是拥有像 reddit 一样快的东西:嵌套评论能够按发布日期、投票总数和其他一些参数排序,所有这些都使用尽可能多的 mysql 和尽可能少的 php。如果您有任何使用闭包表、嵌套集或简单的物化路径的解决方案,我很乐意听到它们。我在这里的解决方案看起来优化且可怕。

4

0 回答 0