使用 JSON 数据对 SQL 行进行数学排序

Sort SQL Rows with math using JSON data

假设我有一个这样的 MySQL 数据库(赞成票和反对票是 JSON 用户 ID 数组),id 是一个自动递增的整数,内容是文本)

id  upvotes             downvotes    content
--- ------------------- ------------ --------------
1   [1, 5, 15]          [1]          some text
10  [1, 100, 25]        [3, 9]       other stuff
17  [5, 10, 1110]       [5, 6, 7, 8] also includes
36  [5, 6, 7, 8, 9]     []           metadata stuff
37  [5, 6, 8, 10, 1, 7] [4]          equal count to 36

我想按赞成票数减去反对票数对返回的行进行排序,然后在相等时按 ID 排序,因此 ID 的顺序为 36, 37, 1, 10, 17。这在 PHP 中可行吗?如何实现?

(这个问题是 的转贴,因为它通过计算数组而不是简单地从行中获取数字来工作。)

MySQL 没有本地 JSON 支持,尽管它似乎即将到来。因此,您必须将这些值视为字符串。基本上,您想计算每个字符串中元素的数量并按差异排序。

你可以通过计算逗号来做到这一点:

order by (length(upvotes) - length(replace(upvotes, ',', '')) ) -
         (length(downvotes) - length(replace(downvotes, ',', '')) )

注意:如果您要维护每个可能投票的字符串,也许您还应该在记录中包含一个计数器。